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-2020, 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; /* Oid of subscription */ 34 Oid srrelid; /* 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 #ifdef EXPOSE_TO_CLIENT_CODE 53 54 /* ---------------- 55 * substate constants 56 * ---------------- 57 */ 58 #define SUBREL_STATE_INIT 'i' /* initializing (sublsn NULL) */ 59 #define SUBREL_STATE_DATASYNC 'd' /* data is being synchronized (sublsn 60 * NULL) */ 61 #define SUBREL_STATE_SYNCDONE 's' /* synchronization finished in front of 62 * apply (sublsn set) */ 63 #define SUBREL_STATE_READY 'r' /* ready (sublsn set) */ 64 65 /* These are never stored in the catalog, we only use them for IPC. */ 66 #define SUBREL_STATE_UNKNOWN '\0' /* unknown state */ 67 #define SUBREL_STATE_SYNCWAIT 'w' /* waiting for sync */ 68 #define SUBREL_STATE_CATCHUP 'c' /* catching up with apply */ 69 70 #endif /* EXPOSE_TO_CLIENT_CODE */ 71 72 typedef struct SubscriptionRelState 73 { 74 Oid relid; 75 XLogRecPtr lsn; 76 char state; 77 } SubscriptionRelState; 78 79 extern void AddSubscriptionRelState(Oid subid, Oid relid, char state, 80 XLogRecPtr sublsn); 81 extern void UpdateSubscriptionRelState(Oid subid, Oid relid, char state, 82 XLogRecPtr sublsn); 83 extern char GetSubscriptionRelState(Oid subid, Oid relid, 84 XLogRecPtr *sublsn, bool missing_ok); 85 extern void RemoveSubscriptionRel(Oid subid, Oid relid); 86 87 extern List *GetSubscriptionRelations(Oid subid); 88 extern List *GetSubscriptionNotReadyRelations(Oid subid); 89 90 #endif /* PG_SUBSCRIPTION_REL_H */ 91