Re: [HACKERS] PATCH: pageinspect / add page_checksum and bt_page_items(bytea) - Mailing list pgsql-hackers
From | Ashutosh Sharma |
---|---|
Subject | Re: [HACKERS] PATCH: pageinspect / add page_checksum and bt_page_items(bytea) |
Date | |
Msg-id | CAE9k0Pm9H-f11HzEX2aAd5cJicF5_gx_4TR1VqwCN=G0xaH34A@mail.gmail.com Whole thread Raw |
In response to | Re: [HACKERS] PATCH: pageinspect / add page_checksum andbt_page_items(bytea) (Peter Eisentraut <peter.eisentraut@2ndquadrant.com>) |
Responses |
Re: [HACKERS] PATCH: pageinspect / add page_checksum andbt_page_items(bytea)
|
List | pgsql-hackers |
Hi, I had a look into this patch and would like to share some of my review comments that requires author's attention. 1) The comment for page_checksum() needs to be corrected. It seems like it has been copied from page_header and not edited it further. /** page_header** Allows inspection of page header fields of a raw page*/ PG_FUNCTION_INFO_V1(page_checksum); Datum page_checksum(PG_FUNCTION_ARGS) 2) It seems like you have choosen wrong datatype for page_checksum. I am getting negative checksum value when trying to run below query. I think the return type for the SQL function page_checksum should be 'integer' instead of 'smallint'. postgres=# SELECT page_checksum(get_raw_page('pg_class', 0), 100);page_checksum --------------- -19532 (1 row) Above problem also exist in case of page_header. I am facing similar problem with page_header as well. postgres=# SELECT page_header(get_raw_page('pg_class', 0)); page_header ---------------------------------------------(0/2891538,-28949,1,220,7216,8192,8192,4,0) (1 row) 3) Any reason for not marking bt_page_items or page_checksum as PARALLEL_SAFE. 4) Error messages in new bt_page_items are not consistent with old bt_page_items. For eg. if i pass meta page blocknumber as input to bt_page_items the error message thrown by new and old bt_page_items are different. postgres=# SELECT * FROM bt_page_items('btree_index', 0) LIMIT 1; ERROR: block 0 is a meta page postgres=# SELECT * FROM bt_page_items(get_raw_page('btree_index', 0)) LIMIT 1; ERROR: block is a meta page postgres=# SELECT * FROM bt_page_items(get_raw_page('btree_index', 1024)) LIMIT 1; ERROR: block number 1024 is out of range for relation "btree_index" postgres=# SELECT * FROM bt_page_items('btree_index', 1024) LIMIT 1; ERROR: block number out of range 5) Code duplication in bt_page_items() and bt_page_items_bytea() needs to be handled. -- With Regards, Ashutosh Sharma EnterpriseDB:http://www.enterprisedb.com On Tue, Mar 7, 2017 at 9:39 PM, Peter Eisentraut <peter.eisentraut@2ndquadrant.com> wrote: > On 3/6/17 16:33, Tomas Vondra wrote: >>> I think it would be better not to maintain so much duplicate code >>> between bt_page_items(text, int) and bt_page_items(bytea). How about >>> just redefining bt_page_items(text, int) as an SQL-language function >>> calling bt_page_items(get_raw_page($1, $2))? >>> >> >> Maybe. We can also probably share the code at the C level, so I'll look >> into that. > > I think SQL would be easier, but either way some reduction in > duplication would be good. > >>> For page_checksum(), the checksums are internally unsigned, so maybe >>> return type int on the SQL level, so that there is no confusion about >>> the sign? >>> >> >> That ship already sailed, I'm afraid. We already have checksum in the >> page_header() output, and it's defined as smallint there. So using int >> here would be inconsistent. > > OK, no worries then. > > -- > Peter Eisentraut http://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services > > > -- > Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-hackers
pgsql-hackers by date: