Support 9.5 and recognize more flags

This follows the CRC32 macro renames in 9.5 (we do not attempt to
maintain support for the older versions), adds support for the
DB_SHUTDOWNED_IN_RECOVERY dbState, and adds support for missing BTree
and GIN page flags.

Satoshi Nagayasu
This commit is contained in:
Christoph Berg 2016-03-19 17:52:28 +01:00
parent 595225c836
commit 10d27139e2
3 changed files with 18 additions and 9 deletions

View File

@ -1,7 +1,7 @@
# View README.pg_filedump first
# note this must match version macros in pg_filedump.h
FD_VERSION=9.3.0
FD_VERSION=9.5.0
CC=gcc
CFLAGS=-g -O -Wall -Wmissing-prototypes -Wmissing-declarations
@ -19,7 +19,7 @@ DISTFILES= README.pg_filedump Makefile Makefile.contrib \
all: pg_filedump
pg_filedump: pg_filedump.o
${CC} ${CFLAGS} -o pg_filedump pg_filedump.o
${CC} ${CFLAGS} -o pg_filedump pg_filedump.o -lpgport
pg_filedump.o: pg_filedump.c
${CC} ${CFLAGS} -I${PGSQL_INCLUDE_DIR} pg_filedump.c -c

View File

@ -24,7 +24,7 @@
#include "pg_filedump.h"
#include "utils/pg_crc_tables.h"
#include <utils/pg_crc.h>
/* checksum_impl.h uses Assert, which doesn't work outside the server */
#undef Assert
@ -1132,6 +1132,8 @@ FormatSpecial()
strcat(flagString, "SPLITEND|");
if (btreeSection->btpo_flags & BTP_HAS_GARBAGE)
strcat(flagString, "HASGARBAGE|");
if (btreeSection->btpo_flags & BTP_INCOMPLETE_SPLIT)
strcat(flagString, "INCOMPLETESPLIT|");
if (strlen(flagString))
flagString[strlen(flagString) - 1] = '\0';
@ -1216,6 +1218,10 @@ FormatSpecial()
strcat(flagString, "LIST|");
if (ginSection->flags & GIN_LIST_FULLROW)
strcat(flagString, "FULLROW|");
if (ginSection->flags & GIN_INCOMPLETE_SPLIT)
strcat(flagString, "INCOMPLETESPLIT|");
if (ginSection->flags & GIN_COMPRESSED)
strcat(flagString, "COMPRESSED|");
if (strlen(flagString))
flagString[strlen(flagString) - 1] = '\0';
printf(" GIN Index Section:\n"
@ -1340,9 +1346,9 @@ FormatControl()
char *dbState;
/* Compute a local copy of the CRC to verify the one on disk */
INIT_CRC32(crcLocal);
COMP_CRC32(crcLocal, buffer, offsetof(ControlFileData, crc));
FIN_CRC32(crcLocal);
INIT_CRC32C(crcLocal);
COMP_CRC32C(crcLocal, buffer, offsetof(ControlFileData, crc));
FIN_CRC32C(crcLocal);
/* Grab a readable version of the database state */
switch (controlData->state)
@ -1353,6 +1359,9 @@ FormatControl()
case DB_SHUTDOWNED:
dbState = "SHUTDOWNED";
break;
case DB_SHUTDOWNED_IN_RECOVERY:
dbState = "SHUTDOWNED_IN_RECOVERY";
break;
case DB_SHUTDOWNING:
dbState = "SHUTDOWNING";
break;
@ -1400,7 +1409,7 @@ FormatControl()
" Maximum Index Keys: %u\n"
" TOAST Chunk Size: %u\n"
" Date and Time Type Storage: %s\n\n",
EQ_CRC32(crcLocal,
EQ_CRC32C(crcLocal,
controlData->crc) ? "Correct" : "Not Correct",
controlData->pg_control_version,
(controlData->pg_control_version == PG_CONTROL_VERSION ?

View File

@ -22,8 +22,8 @@
* Original Author: Patrick Macdonald <patrickm@redhat.com>
*/
#define FD_VERSION "9.4.0" /* version ID of pg_filedump */
#define FD_PG_VERSION "PostgreSQL 9.4.x" /* PG version it works with */
#define FD_VERSION "9.5.0" /* version ID of pg_filedump */
#define FD_PG_VERSION "PostgreSQL 9.5.x" /* PG version it works with */
#include "postgres.h"