Fix pageinspect's heap_page_item to return infomasks as 32 bit values
HeapTupleHeader's t_infomask and t_infomask2 are defined as 16-bit unsigned integers, so when the 16th bit was set, heap_page_item was returning them as negative values, which was ugly. The change to pageinspect--unpackaged--1.0.sql allows a module upgraded from 9.0 to be cleanly updated from the previous definition.
This commit is contained in:
parent
79ad8fc5f8
commit
a338d65461
@ -170,8 +170,8 @@ heap_page_items(PG_FUNCTION_ARGS)
|
|||||||
values[5] = UInt32GetDatum(HeapTupleHeaderGetXmax(tuphdr));
|
values[5] = UInt32GetDatum(HeapTupleHeaderGetXmax(tuphdr));
|
||||||
values[6] = UInt32GetDatum(HeapTupleHeaderGetRawCommandId(tuphdr)); /* shared with xvac */
|
values[6] = UInt32GetDatum(HeapTupleHeaderGetRawCommandId(tuphdr)); /* shared with xvac */
|
||||||
values[7] = PointerGetDatum(&tuphdr->t_ctid);
|
values[7] = PointerGetDatum(&tuphdr->t_ctid);
|
||||||
values[8] = UInt16GetDatum(tuphdr->t_infomask2);
|
values[8] = UInt32GetDatum(tuphdr->t_infomask2);
|
||||||
values[9] = UInt16GetDatum(tuphdr->t_infomask);
|
values[9] = UInt32GetDatum(tuphdr->t_infomask);
|
||||||
values[10] = UInt8GetDatum(tuphdr->t_hoff);
|
values[10] = UInt8GetDatum(tuphdr->t_hoff);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,9 +1,27 @@
|
|||||||
/* contrib/pageinspect/pageinspect--unpackaged--1.0.sql */
|
/* contrib/pageinspect/pageinspect--unpackaged--1.0.sql */
|
||||||
|
|
||||||
|
DROP FUNCTION heap_page_items(bytea);
|
||||||
|
CREATE FUNCTION heap_page_items(IN page bytea,
|
||||||
|
OUT lp smallint,
|
||||||
|
OUT lp_off smallint,
|
||||||
|
OUT lp_flags smallint,
|
||||||
|
OUT lp_len smallint,
|
||||||
|
OUT t_xmin xid,
|
||||||
|
OUT t_xmax xid,
|
||||||
|
OUT t_field3 int4,
|
||||||
|
OUT t_ctid tid,
|
||||||
|
OUT t_infomask2 integer,
|
||||||
|
OUT t_infomask integer,
|
||||||
|
OUT t_hoff smallint,
|
||||||
|
OUT t_bits text,
|
||||||
|
OUT t_oid oid)
|
||||||
|
RETURNS SETOF record
|
||||||
|
AS 'MODULE_PATHNAME', 'heap_page_items'
|
||||||
|
LANGUAGE C STRICT;
|
||||||
|
|
||||||
ALTER EXTENSION pageinspect ADD function get_raw_page(text,integer);
|
ALTER EXTENSION pageinspect ADD function get_raw_page(text,integer);
|
||||||
ALTER EXTENSION pageinspect ADD function get_raw_page(text,text,integer);
|
ALTER EXTENSION pageinspect ADD function get_raw_page(text,text,integer);
|
||||||
ALTER EXTENSION pageinspect ADD function page_header(bytea);
|
ALTER EXTENSION pageinspect ADD function page_header(bytea);
|
||||||
ALTER EXTENSION pageinspect ADD function heap_page_items(bytea);
|
|
||||||
ALTER EXTENSION pageinspect ADD function bt_metap(text);
|
ALTER EXTENSION pageinspect ADD function bt_metap(text);
|
||||||
ALTER EXTENSION pageinspect ADD function bt_page_stats(text,integer);
|
ALTER EXTENSION pageinspect ADD function bt_page_stats(text,integer);
|
||||||
ALTER EXTENSION pageinspect ADD function bt_page_items(text,integer);
|
ALTER EXTENSION pageinspect ADD function bt_page_items(text,integer);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user