Commit 45ffeb7e authored by Robert Haas's avatar Robert Haas

pageinspect: Use new pg_lsn datatype.

Michael Paquier, with slight comment changes by me
parent ae95f5f7
...@@ -4,8 +4,8 @@ MODULE_big = pageinspect ...@@ -4,8 +4,8 @@ MODULE_big = pageinspect
OBJS = rawpage.o heapfuncs.o btreefuncs.o fsmfuncs.o OBJS = rawpage.o heapfuncs.o btreefuncs.o fsmfuncs.o
EXTENSION = pageinspect EXTENSION = pageinspect
DATA = pageinspect--1.1.sql pageinspect--1.0--1.1.sql \ DATA = pageinspect--1.2.sql pageinspect--1.0--1.1.sql \
pageinspect--unpackaged--1.0.sql pageinspect--1.1--1.2.sql pageinspect--unpackaged--1.0.sql
ifdef USE_PGXS ifdef USE_PGXS
PG_CONFIG = pg_config PG_CONFIG = pg_config
......
/* contrib/pageinspect/pageinspect--1.1--1.2.sql */
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
\echo Use "ALTER EXTENSION pageinspect UPDATE TO 1.2" to load this file. \quit
DROP FUNCTION page_header(bytea);
CREATE FUNCTION page_header(IN page bytea,
OUT lsn pg_lsn,
OUT checksum smallint,
OUT flags smallint,
OUT lower smallint,
OUT upper smallint,
OUT special smallint,
OUT pagesize smallint,
OUT version smallint,
OUT prune_xid xid)
AS 'MODULE_PATHNAME', 'page_header'
LANGUAGE C STRICT;
/* contrib/pageinspect/pageinspect--1.1.sql */ /* contrib/pageinspect/pageinspect--1.2.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION -- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION pageinspect" to load this file. \quit \echo Use "CREATE EXTENSION pageinspect" to load this file. \quit
...@@ -20,7 +20,7 @@ LANGUAGE C STRICT; ...@@ -20,7 +20,7 @@ LANGUAGE C STRICT;
-- page_header() -- page_header()
-- --
CREATE FUNCTION page_header(IN page bytea, CREATE FUNCTION page_header(IN page bytea,
OUT lsn text, OUT lsn pg_lsn,
OUT checksum smallint, OUT checksum smallint,
OUT flags smallint, OUT flags smallint,
OUT lower smallint, OUT lower smallint,
......
# pageinspect extension # pageinspect extension
comment = 'inspect the contents of database pages at a low level' comment = 'inspect the contents of database pages at a low level'
default_version = '1.1' default_version = '1.2'
module_pathname = '$libdir/pageinspect' module_pathname = '$libdir/pageinspect'
relocatable = true relocatable = true
...@@ -18,10 +18,12 @@ ...@@ -18,10 +18,12 @@
#include "access/htup_details.h" #include "access/htup_details.h"
#include "catalog/catalog.h" #include "catalog/catalog.h"
#include "catalog/namespace.h" #include "catalog/namespace.h"
#include "catalog/pg_type.h"
#include "funcapi.h" #include "funcapi.h"
#include "miscadmin.h" #include "miscadmin.h"
#include "storage/bufmgr.h" #include "storage/bufmgr.h"
#include "utils/builtins.h" #include "utils/builtins.h"
#include "utils/pg_lsn.h"
#include "utils/rel.h" #include "utils/rel.h"
PG_MODULE_MAGIC; PG_MODULE_MAGIC;
...@@ -180,7 +182,6 @@ page_header(PG_FUNCTION_ARGS) ...@@ -180,7 +182,6 @@ page_header(PG_FUNCTION_ARGS)
PageHeader page; PageHeader page;
XLogRecPtr lsn; XLogRecPtr lsn;
char lsnchar[64];
if (!superuser()) if (!superuser())
ereport(ERROR, ereport(ERROR,
...@@ -207,10 +208,17 @@ page_header(PG_FUNCTION_ARGS) ...@@ -207,10 +208,17 @@ page_header(PG_FUNCTION_ARGS)
/* Extract information from the page header */ /* Extract information from the page header */
lsn = PageGetLSN(page); lsn = PageGetLSN(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", snprintf(lsnchar, sizeof(lsnchar), "%X/%X",
(uint32) (lsn >> 32), (uint32) lsn); (uint32) (lsn >> 32), (uint32) lsn);
values[0] = CStringGetTextDatum(lsnchar); values[0] = CStringGetTextDatum(lsnchar);
}
else
values[0] = LSNGetDatum(lsn);
values[1] = UInt16GetDatum(page->pd_checksum); values[1] = UInt16GetDatum(page->pd_checksum);
values[2] = UInt16GetDatum(page->pd_flags); values[2] = UInt16GetDatum(page->pd_flags);
values[3] = UInt16GetDatum(page->pd_lower); values[3] = UInt16GetDatum(page->pd_lower);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment