5 Commits

Author SHA1 Message Date
17dafd471e Change all // comments to /* */ and run pgindent
Fabrízio de Royes Mello
2014-08-30 22:18:12 +02:00
81982fa168 Add support for verifying block checksums
Patch by Jeff Davis, rebased by Fabrízio de Royes Mello.
2014-08-30 22:15:22 +02:00
e3b9612db0 Update copyright date. 2014-06-10 13:24:38 -04:00
093effb3f8 Add .gitignore. 2014-06-10 13:10:11 -04:00
bbd992bc26 Preliminary updates for Postgres 9.3. 2013-06-06 18:33:16 +00:00
6 changed files with 1596 additions and 1517 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/pg_filedump.o
/pg_filedump

View File

@ -1,7 +1,7 @@
# View README.pg_filedump first # View README.pg_filedump first
# note this must match version macros in pg_filedump.h # note this must match version macros in pg_filedump.h
FD_VERSION=9.2.0 FD_VERSION=9.3.0
CC=gcc CC=gcc
CFLAGS=-g -O -Wall -Wmissing-prototypes -Wmissing-declarations CFLAGS=-g -O -Wall -Wmissing-prototypes -Wmissing-declarations

View File

@ -2,7 +2,7 @@ pg_filedump - Display formatted contents of a PostgreSQL heap, index,
or control file. or control file.
Copyright (c) 2002-2010 Red Hat, Inc. Copyright (c) 2002-2010 Red Hat, Inc.
Copyright (c) 2011-2012, PostgreSQL Global Development Group Copyright (c) 2011-2014, PostgreSQL Global Development Group
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -59,7 +59,7 @@ not require any manual adjustments of the Makefile.
------------------------------------------------------------------------ ------------------------------------------------------------------------
Invocation: Invocation:
pg_filedump [-abcdfhixy] [-R startblock [endblock]] [-S blocksize] file pg_filedump [-abcdfhikxy] [-R startblock [endblock]] [-S blocksize] file
Defaults are: relative addressing, range of the entire file, block size Defaults are: relative addressing, range of the entire file, block size
as listed on block 0 in the file as listed on block 0 in the file
@ -74,6 +74,7 @@ The following options are valid for heap and index files:
-f Display formatted block content dump along with interpretation -f Display formatted block content dump along with interpretation
-h Display this information -h Display this information
-i Display interpreted item details -i Display interpreted item details
-k Verify block checksums
-R Display specific block ranges within the file (Blocks are -R Display specific block ranges within the file (Blocks are
indexed from 0) indexed from 0)
[startblock]: block to start at [startblock]: block to start at

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
* formatting heap (data), index and control files. * formatting heap (data), index and control files.
* *
* Copyright (c) 2002-2010 Red Hat, Inc. * Copyright (c) 2002-2010 Red Hat, Inc.
* Copyright (c) 2011-2012, PostgreSQL Global Development Group * Copyright (c) 2011-2014, PostgreSQL Global Development Group
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -22,8 +22,8 @@
* Original Author: Patrick Macdonald <patrickm@redhat.com> * Original Author: Patrick Macdonald <patrickm@redhat.com>
*/ */
#define FD_VERSION "9.2.0" /* version ID of pg_filedump */ #define FD_VERSION "9.4.0" /* version ID of pg_filedump */
#define FD_PG_VERSION "PostgreSQL 9.2.x" /* PG version it works with */ #define FD_PG_VERSION "PostgreSQL 9.4.x" /* PG version it works with */
#include "postgres.h" #include "postgres.h"
@ -34,81 +34,85 @@
#include "access/gist.h" #include "access/gist.h"
#include "access/hash.h" #include "access/hash.h"
#include "access/htup.h" #include "access/htup.h"
#include "access/htup_details.h"
#include "access/itup.h" #include "access/itup.h"
#include "access/nbtree.h" #include "access/nbtree.h"
#include "access/spgist_private.h" #include "access/spgist_private.h"
#include "catalog/pg_control.h" #include "catalog/pg_control.h"
#include "storage/bufpage.h" #include "storage/bufpage.h"
// Options for Block formatting operations /* Options for Block formatting operations */
static unsigned int blockOptions = 0; static unsigned int blockOptions = 0;
typedef enum
typedef enum blockSwitches
{ {
BLOCK_ABSOLUTE = 0x00000001, // -a: Absolute (vs Relative) addressing BLOCK_ABSOLUTE = 0x00000001, /* -a: Absolute(vs Relative) addressing */
BLOCK_BINARY = 0x00000002, // -b: Binary dump of block BLOCK_BINARY = 0x00000002, /* -b: Binary dump of block */
BLOCK_FORMAT = 0x00000004, // -f: Formatted dump of blocks / control file BLOCK_FORMAT = 0x00000004, /* -f: Formatted dump of blocks / control file */
BLOCK_FORCED = 0x00000008, // -S: Block size forced BLOCK_FORCED = 0x00000008, /* -S: Block size forced */
BLOCK_NO_INTR = 0x00000010, // -d: Dump straight blocks BLOCK_NO_INTR = 0x00000010, /* -d: Dump straight blocks */
BLOCK_RANGE = 0x00000020 // -R: Specific block range to dump BLOCK_RANGE = 0x00000020, /* -R: Specific block range to dump */
} BLOCK_CHECKSUMS = 0x00000040 /* -k: verify block checksums */
blockSwitches; } blockSwitches;
static int blockStart = -1; // -R [start]: Block range start /* -R[start]:Block range start */
static int blockEnd = -1; // -R [end]: Block range end static int blockStart = -1;
// Options for Item formatting operations /* -R[end]:Block range end */
static int blockEnd = -1;
/* Options for Item formatting operations */
static unsigned int itemOptions = 0; static unsigned int itemOptions = 0;
typedef enum
{
ITEM_DETAIL = 0x00000001, // -i: Display interpreted items
ITEM_HEAP = 0x00000002, // -y: Blocks contain HeapTuple items
ITEM_INDEX = 0x00000004, // -x: Blocks contain IndexTuple items
ITEM_SPG_INNER = 0x00000008, // Blocks contain SpGistInnerTuple items
ITEM_SPG_LEAF = 0x00000010 // Blocks contain SpGistLeafTuple items
}
itemSwitches;
// Options for Control File formatting operations typedef enum itemSwitches
{
ITEM_DETAIL = 0x00000001, /* -i: Display interpreted items */
ITEM_HEAP = 0x00000002, /* -y: Blocks contain HeapTuple items */
ITEM_INDEX = 0x00000004, /* -x: Blocks contain IndexTuple items */
ITEM_SPG_INNER = 0x00000008, /* Blocks contain SpGistInnerTuple items */
ITEM_SPG_LEAF = 0x00000010 /* Blocks contain SpGistLeafTuple items */
} itemSwitches;
/* Options for Control File formatting operations */
static unsigned int controlOptions = 0; static unsigned int controlOptions = 0;
typedef enum
{
CONTROL_DUMP = 0x00000001, // -c: Dump control file
CONTROL_FORMAT = BLOCK_FORMAT, // -f: Formatted dump of control file
CONTROL_FORCED = BLOCK_FORCED // -S: Block size forced
}
controlSwitches;
// Possible value types for the Special Section typedef enum controlSwitches
typedef enum
{ {
SPEC_SECT_NONE, // No special section on block CONTROL_DUMP = 0x00000001, /* -c: Dump control file */
SPEC_SECT_SEQUENCE, // Sequence info in special section CONTROL_FORMAT = BLOCK_FORMAT, /* -f: Formatted dump of control file */
SPEC_SECT_INDEX_BTREE, // BTree index info in special section CONTROL_FORCED = BLOCK_FORCED /* -S: Block size forced */
SPEC_SECT_INDEX_HASH, // Hash index info in special section } controlSwitches;
SPEC_SECT_INDEX_GIST, // GIST index info in special section
SPEC_SECT_INDEX_GIN, // GIN index info in special section /* Possible value types for the Special Section */
SPEC_SECT_INDEX_SPGIST, // SP-GIST index info in special section typedef enum specialSectionTypes
SPEC_SECT_ERROR_UNKNOWN, // Unknown error {
SPEC_SECT_ERROR_BOUNDARY // Boundary error SPEC_SECT_NONE, /* No special section on block */
} SPEC_SECT_SEQUENCE, /* Sequence info in special section */
specialSectionTypes; SPEC_SECT_INDEX_BTREE, /* BTree index info in special section */
SPEC_SECT_INDEX_HASH, /* Hash index info in special section */
SPEC_SECT_INDEX_GIST, /* GIST index info in special section */
SPEC_SECT_INDEX_GIN, /* GIN index info in special section */
SPEC_SECT_INDEX_SPGIST, /* SP - GIST index info in special section */
SPEC_SECT_ERROR_UNKNOWN, /* Unknown error */
SPEC_SECT_ERROR_BOUNDARY /* Boundary error */
} specialSectionTypes;
static unsigned int specialType = SPEC_SECT_NONE; static unsigned int specialType = SPEC_SECT_NONE;
// Possible return codes from option validation routine. /* Possible return codes from option validation routine. */
// pg_filedump doesn't do much with them now but maybe in /* pg_filedump doesn't do much with them now but maybe in */
// the future... /* the future... */
typedef enum typedef enum optionReturnCodes
{ {
OPT_RC_VALID, // All options are valid OPT_RC_VALID, /* All options are valid */
OPT_RC_INVALID, // Improper option string OPT_RC_INVALID, /* Improper option string */
OPT_RC_FILE, // File problems OPT_RC_FILE, /* File problems */
OPT_RC_DUPLICATE, // Duplicate option encountered OPT_RC_DUPLICATE, /* Duplicate option encountered */
OPT_RC_COPYRIGHT // Copyright should be displayed OPT_RC_COPYRIGHT /* Copyright should be displayed */
} } optionReturnCodes;
optionReturnCodes;
// Simple macro to check for duplicate options and then set /* Simple macro to check for duplicate options and then set */
// an option flag for later consumption /* an option flag for later consumption */
#define SET_OPTION(_x,_y,_z) if (_x & _y) \ #define SET_OPTION(_x,_y,_z) if (_x & _y) \
{ \ { \
rc = OPT_RC_DUPLICATE; \ rc = OPT_RC_DUPLICATE; \
@ -117,6 +121,6 @@ optionReturnCodes;
else \ else \
_x |= _y; _x |= _y;
#define SEQUENCE_MAGIC 0x1717 // PostgreSQL defined magic number #define SEQUENCE_MAGIC 0x1717 /* PostgreSQL defined magic number */
#define EOF_ENCOUNTERED (-1) // Indicator for partial read #define EOF_ENCOUNTERED (-1) /* Indicator for partial read */
#define BYTES_PER_LINE 16 // Format the binary 16 bytes per line #define BYTES_PER_LINE 16 /* Format the binary 16 bytes per line */