diff options
Diffstat (limited to 'contrib/pageinspect/rawpage.c')
| -rw-r--r-- | contrib/pageinspect/rawpage.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c index ff541ed40d6..f1e0944c0e0 100644 --- a/contrib/pageinspect/rawpage.c +++ b/contrib/pageinspect/rawpage.c @@ -18,10 +18,12 @@ #include "access/htup_details.h" #include "catalog/catalog.h" #include "catalog/namespace.h" +#include "catalog/pg_type.h" #include "funcapi.h" #include "miscadmin.h" #include "storage/bufmgr.h" #include "utils/builtins.h" +#include "utils/pg_lsn.h" #include "utils/rel.h" PG_MODULE_MAGIC; @@ -180,7 +182,6 @@ page_header(PG_FUNCTION_ARGS) PageHeader page; XLogRecPtr lsn; - char lsnchar[64]; if (!superuser()) ereport(ERROR, @@ -207,10 +208,17 @@ page_header(PG_FUNCTION_ARGS) /* Extract information from the page header */ lsn = PageGetLSN(page); - snprintf(lsnchar, sizeof(lsnchar), "%X/%X", - (uint32) (lsn >> 32), (uint32) lsn); - values[0] = CStringGetTextDatum(lsnchar); + /* pageinspect >= 1.2 uses pg_lsn instead of text for the LSN field. */ + if (tupdesc->attrs[0]->atttypid == TEXTOID) + { + char lsnchar[64]; + snprintf(lsnchar, sizeof(lsnchar), "%X/%X", + (uint32) (lsn >> 32), (uint32) lsn); + values[0] = CStringGetTextDatum(lsnchar); + } + else + values[0] = LSNGetDatum(lsn); values[1] = UInt16GetDatum(page->pd_checksum); values[2] = UInt16GetDatum(page->pd_flags); values[3] = UInt16GetDatum(page->pd_lower); |
