diff options
Diffstat (limited to 'contrib/pageinspect/rawpage.c')
-rw-r--r-- | contrib/pageinspect/rawpage.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c index f51a4e31f5..cc66fc8b04 100644 --- a/contrib/pageinspect/rawpage.c +++ b/contrib/pageinspect/rawpage.c @@ -5,7 +5,7 @@ * * Access-method specific inspection functions are in separate files. * - * Copyright (c) 2007-2012, PostgreSQL Global Development Group + * Copyright (c) 2007-2014, PostgreSQL Global Development Group * * IDENTIFICATION * contrib/pageinspect/rawpage.c @@ -15,20 +15,19 @@ #include "postgres.h" +#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; -Datum get_raw_page(PG_FUNCTION_ARGS); -Datum get_raw_page_fork(PG_FUNCTION_ARGS); -Datum page_header(PG_FUNCTION_ARGS); - static bytea *get_raw_page_internal(text *relname, ForkNumber forknum, BlockNumber blkno); @@ -179,7 +178,6 @@ page_header(PG_FUNCTION_ARGS) PageHeader page; XLogRecPtr lsn; - char lsnchar[64]; if (!superuser()) ereport(ERROR, @@ -206,10 +204,19 @@ page_header(PG_FUNCTION_ARGS) /* Extract information from the page header */ lsn = PageGetLSN(page); - snprintf(lsnchar, sizeof(lsnchar), "%X/%X", lsn.xlogid, lsn.xrecoff); - values[0] = CStringGetTextDatum(lsnchar); - values[1] = UInt16GetDatum(PageGetTLI(page)); + /* 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); values[4] = UInt16GetDatum(page->pd_upper); |