/*------------------------------------------------------------------------- * * logicalrelation.h * Relation definitions for logical replication relation mapping. * * Portions Copyright (c) 2016-2023, PostgreSQL Global Development Group * * src/include/replication/logicalrelation.h * *------------------------------------------------------------------------- */ #ifndef LOGICALRELATION_H #define LOGICALRELATION_H #include "access/attmap.h" #include "catalog/index.h" #include "replication/logicalproto.h" typedef struct LogicalRepRelMapEntry { LogicalRepRelation remoterel; /* key is remoterel.remoteid */ /* * Validity flag -- when false, revalidate all derived info at next * logicalrep_rel_open. (While the localrel is open, we assume our lock * on that rel ensures the info remains good.) */ bool localrelvalid; /* Mapping to local relation. */ Oid localreloid; /* local relation id */ Relation localrel; /* relcache entry (NULL when closed) */ AttrMap *attrmap; /* map of local attributes to remote ones */ bool updatable; /* Can apply updates/deletes? */ Oid localindexoid; /* which index to use, or InvalidOid if none */ /* Sync state. */ char state; XLogRecPtr statelsn; } LogicalRepRelMapEntry; extern void logicalrep_relmap_update(LogicalRepRelation *remoterel); extern void logicalrep_partmap_reset_relmap(LogicalRepRelation *remoterel); extern LogicalRepRelMapEntry *logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode); extern LogicalRepRelMapEntry *logicalrep_partition_open(LogicalRepRelMapEntry *root, Relation partrel, AttrMap *map); extern void logicalrep_rel_close(LogicalRepRelMapEntry *rel, LOCKMODE lockmode); extern bool IsIndexUsableForReplicaIdentityFull(IndexInfo *indexInfo, AttrMap *attrmap); extern Oid GetRelationIdentityOrPK(Relation rel); #endif /* LOGICALRELATION_H */