1 /* ------------------------------------------------------------------------- 2 * 3 * pg_subscription_rel.h 4 * definition of the system catalog containing the state for each 5 * replicated table in each subscription (pg_subscription_rel) 6 * 7 * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group 8 * Portions Copyright (c) 1994, Regents of the University of California 9 * 10 * src/include/catalog/pg_subscription_rel.h 11 * 12 * NOTES 13 * The Catalog.pm module reads this file and derives schema 14 * information. 15 * 16 * ------------------------------------------------------------------------- 17 */ 18 #ifndef PG_SUBSCRIPTION_REL_H 19 #define PG_SUBSCRIPTION_REL_H 20 21 #include "access/xlogdefs.h" 22 #include "catalog/genbki.h" 23 #include "catalog/pg_subscription_rel_d.h" 24 #include "nodes/pg_list.h" 25 26 /* ---------------- 27 * pg_subscription_rel definition. cpp turns this into 28 * typedef struct FormData_pg_subscription_rel 29 * ---------------- 30 */ 31 CATALOG(pg_subscription_rel,6102,SubscriptionRelRelationId) 32 { 33 Oid srsubid BKI_LOOKUP(pg_subscription); /* Oid of subscription */ 34 Oid srrelid BKI_LOOKUP(pg_class); /* Oid of relation */ 35 char srsubstate; /* state of the relation in subscription */ 36 37 /* 38 * Although srsublsn is a fixed-width type, it is allowed to be NULL, so 39 * we prevent direct C code access to it just as for a varlena field. 40 */ 41 #ifdef CATALOG_VARLEN /* variable-length fields start here */ 42 43 XLogRecPtr srsublsn BKI_FORCE_NULL; /* remote LSN of the state change 44 * used for synchronization 45 * coordination, or NULL if not 46 * valid */ 47 #endif 48 } FormData_pg_subscription_rel; 49 50 typedef FormData_pg_subscription_rel *Form_pg_subscription_rel; 51 52 DECLARE_UNIQUE_INDEX_PKEY(pg_subscription_rel_srrelid_srsubid_index, 6117, on pg_subscription_rel using btree(srrelid oid_ops, srsubid oid_ops)); 53 #define SubscriptionRelSrrelidSrsubidIndexId 6117 54 55 #ifdef EXPOSE_TO_CLIENT_CODE 56 57 /* ---------------- 58 * substate constants 59 * ---------------- 60 */ 61 #define SUBREL_STATE_INIT 'i' /* initializing (sublsn NULL) */ 62 #define SUBREL_STATE_DATASYNC 'd' /* data is being synchronized (sublsn 63 * NULL) */ 64 #define SUBREL_STATE_FINISHEDCOPY 'f' /* tablesync copy phase is completed 65 * (sublsn NULL) */ 66 #define SUBREL_STATE_SYNCDONE 's' /* synchronization finished in front of 67 * apply (sublsn set) */ 68 #define SUBREL_STATE_READY 'r' /* ready (sublsn set) */ 69 70 /* These are never stored in the catalog, we only use them for IPC. */ 71 #define SUBREL_STATE_UNKNOWN '\0' /* unknown state */ 72 #define SUBREL_STATE_SYNCWAIT 'w' /* waiting for sync */ 73 #define SUBREL_STATE_CATCHUP 'c' /* catching up with apply */ 74 75 #endif /* EXPOSE_TO_CLIENT_CODE */ 76 77 typedef struct SubscriptionRelState 78 { 79 Oid relid; 80 XLogRecPtr lsn; 81 char state; 82 } SubscriptionRelState; 83 84 extern void AddSubscriptionRelState(Oid subid, Oid relid, char state, 85 XLogRecPtr sublsn); 86 extern void UpdateSubscriptionRelState(Oid subid, Oid relid, char state, 87 XLogRecPtr sublsn); 88 extern char GetSubscriptionRelState(Oid subid, Oid relid, XLogRecPtr *sublsn); 89 extern void RemoveSubscriptionRel(Oid subid, Oid relid); 90 91 extern List *GetSubscriptionRelations(Oid subid); 92 extern List *GetSubscriptionNotReadyRelations(Oid subid); 93 94 #endif /* PG_SUBSCRIPTION_REL_H */ 95