96 lines
3.3 KiB
C
96 lines
3.3 KiB
C
/* -------------------------------------------------------------------------
|
|
*
|
|
* pg_subscription_rel.h
|
|
* definition of the system catalog containing the state for each
|
|
* replicated table in each subscription (pg_subscription_rel)
|
|
*
|
|
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/catalog/pg_subscription_rel.h
|
|
*
|
|
* NOTES
|
|
* The Catalog.pm module reads this file and derives schema
|
|
* information.
|
|
*
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PG_SUBSCRIPTION_REL_H
|
|
#define PG_SUBSCRIPTION_REL_H
|
|
|
|
#include "access/xlogdefs.h"
|
|
#include "catalog/genbki.h"
|
|
#include "catalog/pg_subscription_rel_d.h"
|
|
#include "nodes/pg_list.h"
|
|
|
|
/* ----------------
|
|
* pg_subscription_rel definition. cpp turns this into
|
|
* typedef struct FormData_pg_subscription_rel
|
|
* ----------------
|
|
*/
|
|
CATALOG(pg_subscription_rel,6102,SubscriptionRelRelationId)
|
|
{
|
|
Oid srsubid BKI_LOOKUP(pg_subscription); /* Oid of subscription */
|
|
Oid srrelid BKI_LOOKUP(pg_class); /* Oid of relation */
|
|
char srsubstate; /* state of the relation in subscription */
|
|
|
|
/*
|
|
* Although srsublsn is a fixed-width type, it is allowed to be NULL, so
|
|
* we prevent direct C code access to it just as for a varlena field.
|
|
*/
|
|
#ifdef CATALOG_VARLEN /* variable-length fields start here */
|
|
|
|
XLogRecPtr srsublsn BKI_FORCE_NULL; /* remote LSN of the state change
|
|
* used for synchronization
|
|
* coordination, or NULL if not
|
|
* valid */
|
|
#endif
|
|
} FormData_pg_subscription_rel;
|
|
|
|
typedef FormData_pg_subscription_rel *Form_pg_subscription_rel;
|
|
|
|
DECLARE_UNIQUE_INDEX_PKEY(pg_subscription_rel_srrelid_srsubid_index, 6117, SubscriptionRelSrrelidSrsubidIndexId, pg_subscription_rel, btree(srrelid oid_ops, srsubid oid_ops));
|
|
|
|
MAKE_SYSCACHE(SUBSCRIPTIONRELMAP, pg_subscription_rel_srrelid_srsubid_index, 64);
|
|
|
|
#ifdef EXPOSE_TO_CLIENT_CODE
|
|
|
|
/* ----------------
|
|
* substate constants
|
|
* ----------------
|
|
*/
|
|
#define SUBREL_STATE_INIT 'i' /* initializing (sublsn NULL) */
|
|
#define SUBREL_STATE_DATASYNC 'd' /* data is being synchronized (sublsn
|
|
* NULL) */
|
|
#define SUBREL_STATE_FINISHEDCOPY 'f' /* tablesync copy phase is completed
|
|
* (sublsn NULL) */
|
|
#define SUBREL_STATE_SYNCDONE 's' /* synchronization finished in front of
|
|
* apply (sublsn set) */
|
|
#define SUBREL_STATE_READY 'r' /* ready (sublsn set) */
|
|
|
|
/* These are never stored in the catalog, we only use them for IPC. */
|
|
#define SUBREL_STATE_UNKNOWN '\0' /* unknown state */
|
|
#define SUBREL_STATE_SYNCWAIT 'w' /* waiting for sync */
|
|
#define SUBREL_STATE_CATCHUP 'c' /* catching up with apply */
|
|
|
|
#endif /* EXPOSE_TO_CLIENT_CODE */
|
|
|
|
typedef struct SubscriptionRelState
|
|
{
|
|
Oid relid;
|
|
XLogRecPtr lsn;
|
|
char state;
|
|
} SubscriptionRelState;
|
|
|
|
extern void AddSubscriptionRelState(Oid subid, Oid relid, char state,
|
|
XLogRecPtr sublsn, bool retain_lock);
|
|
extern void UpdateSubscriptionRelState(Oid subid, Oid relid, char state,
|
|
XLogRecPtr sublsn);
|
|
extern char GetSubscriptionRelState(Oid subid, Oid relid, XLogRecPtr *sublsn);
|
|
extern void RemoveSubscriptionRel(Oid subid, Oid relid);
|
|
|
|
extern bool HasSubscriptionRelations(Oid subid);
|
|
extern List *GetSubscriptionRelations(Oid subid, bool not_ready);
|
|
|
|
#endif /* PG_SUBSCRIPTION_REL_H */
|