diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-02-14 15:37:59 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-02-14 15:37:59 -0500 |
commit | 8da9a226369e9ceec7cef1ab7a16cdc0adb4d657 (patch) | |
tree | 49bf2a8e9f3bb8bd718006e158e8a3c548004cd6 /src/include/access/gistxlog.h | |
parent | fb47544d0ca18312bf0b9e53e335217db5c41a08 (diff) | |
download | postgresql-8da9a226369e9ceec7cef1ab7a16cdc0adb4d657.tar.gz postgresql-8da9a226369e9ceec7cef1ab7a16cdc0adb4d657.zip |
Split index xlog headers from other private index headers.
The xlog-specific headers need to be included in both frontend code -
specifically, pg_waldump - and the backend, but the remainder of the
private headers for each index are only needed by the backend. By
splitting the xlog stuff out into separate headers, pg_waldump pulls
in fewer backend headers, which is a good thing.
Patch by me, reviewed by Michael Paquier and Andres Freund, per a
complaint from Dilip Kumar.
Discussion: http://postgr.es/m/CA+TgmoZ=F=GkxV0YEv-A8tb+AEGy_Qa7GSiJ8deBKFATnzfEug@mail.gmail.com
Diffstat (limited to 'src/include/access/gistxlog.h')
-rw-r--r-- | src/include/access/gistxlog.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/include/access/gistxlog.h b/src/include/access/gistxlog.h new file mode 100644 index 00000000000..3b126eca2ac --- /dev/null +++ b/src/include/access/gistxlog.h @@ -0,0 +1,69 @@ +/*------------------------------------------------------------------------- + * + * gistxlog.h + * gist xlog routines + * + * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/access/gistxlog.h + * + *------------------------------------------------------------------------- + */ +#ifndef GIST_XLOG_H +#define GIST_XLOG_H + +#include "access/gist.h" +#include "access/xlogreader.h" +#include "lib/stringinfo.h" + +#define XLOG_GIST_PAGE_UPDATE 0x00 + /* #define XLOG_GIST_NEW_ROOT 0x20 */ /* not used anymore */ +#define XLOG_GIST_PAGE_SPLIT 0x30 + /* #define XLOG_GIST_INSERT_COMPLETE 0x40 */ /* not used anymore */ +#define XLOG_GIST_CREATE_INDEX 0x50 + /* #define XLOG_GIST_PAGE_DELETE 0x60 */ /* not used anymore */ + +/* + * Backup Blk 0: updated page. + * Backup Blk 1: If this operation completes a page split, by inserting a + * downlink for the split page, the left half of the split + */ +typedef struct gistxlogPageUpdate +{ + /* number of deleted offsets */ + uint16 ntodelete; + uint16 ntoinsert; + + /* + * In payload of blk 0 : 1. todelete OffsetNumbers 2. tuples to insert + */ +} gistxlogPageUpdate; + +/* + * Backup Blk 0: If this operation completes a page split, by inserting a + * downlink for the split page, the left half of the split + * Backup Blk 1 - npage: split pages (1 is the original page) + */ +typedef struct gistxlogPageSplit +{ + BlockNumber origrlink; /* rightlink of the page before split */ + GistNSN orignsn; /* NSN of the page before split */ + bool origleaf; /* was splitted page a leaf page? */ + + uint16 npage; /* # of pages in the split */ + bool markfollowright; /* set F_FOLLOW_RIGHT flags */ + + /* + * follow: 1. gistxlogPage and array of IndexTupleData per page + */ +} gistxlogPageSplit; + +extern void gist_redo(XLogReaderState *record); +extern void gist_desc(StringInfo buf, XLogReaderState *record); +extern const char *gist_identify(uint8 info); +extern void gist_xlog_startup(void); +extern void gist_xlog_cleanup(void); +extern void gist_mask(char *pagedata, BlockNumber blkno); + +#endif |