mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-30 18:01:19 +02:00
c8e1ba736b
Backpatch-through: 11
115 lines
3.4 KiB
C
115 lines
3.4 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* gistxlog.h
|
|
* gist xlog routines
|
|
*
|
|
* Portions Copyright (c) 1996-2023, 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_DELETE 0x10 /* delete leaf index tuples for a
|
|
* page */
|
|
#define XLOG_GIST_PAGE_REUSE 0x20 /* old page is about to be reused
|
|
* from FSM */
|
|
#define XLOG_GIST_PAGE_SPLIT 0x30
|
|
/* #define XLOG_GIST_INSERT_COMPLETE 0x40 */ /* not used anymore */
|
|
/* #define XLOG_GIST_CREATE_INDEX 0x50 */ /* not used anymore */
|
|
#define XLOG_GIST_PAGE_DELETE 0x60
|
|
#define XLOG_GIST_ASSIGN_LSN 0x70 /* nop, assign new LSN */
|
|
|
|
/*
|
|
* 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: Leaf page, whose index tuples are deleted.
|
|
*/
|
|
typedef struct gistxlogDelete
|
|
{
|
|
TransactionId snapshotConflictHorizon;
|
|
uint16 ntodelete; /* number of deleted offsets */
|
|
|
|
/*
|
|
* In payload of blk 0 : todelete OffsetNumbers
|
|
*/
|
|
} gistxlogDelete;
|
|
|
|
#define SizeOfGistxlogDelete (offsetof(gistxlogDelete, ntodelete) + sizeof(uint16))
|
|
|
|
/*
|
|
* 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;
|
|
|
|
/*
|
|
* Backup Blk 0: page that was deleted.
|
|
* Backup Blk 1: parent page, containing the downlink to the deleted page.
|
|
*/
|
|
typedef struct gistxlogPageDelete
|
|
{
|
|
FullTransactionId deleteXid; /* last Xid which could see page in scan */
|
|
OffsetNumber downlinkOffset; /* Offset of downlink referencing this
|
|
* page */
|
|
} gistxlogPageDelete;
|
|
|
|
#define SizeOfGistxlogPageDelete (offsetof(gistxlogPageDelete, downlinkOffset) + sizeof(OffsetNumber))
|
|
|
|
|
|
/*
|
|
* This is what we need to know about page reuse, for hot standby.
|
|
*/
|
|
typedef struct gistxlogPageReuse
|
|
{
|
|
RelFileLocator locator;
|
|
BlockNumber block;
|
|
FullTransactionId snapshotConflictHorizon;
|
|
} gistxlogPageReuse;
|
|
|
|
#define SizeOfGistxlogPageReuse (offsetof(gistxlogPageReuse, snapshotConflictHorizon) + sizeof(FullTransactionId))
|
|
|
|
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
|