diff options
Diffstat (limited to 'src/backend/replication/logical/relation.c')
-rw-r--r-- | src/backend/replication/logical/relation.c | 71 |
1 files changed, 37 insertions, 34 deletions
diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c index 590355a846e..41eff8971a5 100644 --- a/src/backend/replication/logical/relation.c +++ b/src/backend/replication/logical/relation.c @@ -30,13 +30,13 @@ #include "utils/memutils.h" #include "utils/syscache.h" -static MemoryContext LogicalRepRelMapContext = NULL; +static MemoryContext LogicalRepRelMapContext = NULL; -static HTAB *LogicalRepRelMap = NULL; -static HTAB *LogicalRepTypMap = NULL; +static HTAB *LogicalRepRelMap = NULL; +static HTAB *LogicalRepTypMap = NULL; static void logicalrep_typmap_invalidate_cb(Datum arg, int cacheid, - uint32 hashvalue); + uint32 hashvalue); /* * Relcache invalidation callback for our relation map cache. @@ -44,7 +44,7 @@ static void logicalrep_typmap_invalidate_cb(Datum arg, int cacheid, static void logicalrep_relmap_invalidate_cb(Datum arg, Oid reloid) { - LogicalRepRelMapEntry *entry; + LogicalRepRelMapEntry *entry; /* Just to be sure. */ if (LogicalRepRelMap == NULL) @@ -110,7 +110,7 @@ logicalrep_relmap_init(void) /* This will usually be small. */ LogicalRepTypMap = hash_create("logicalrep type map cache", 2, &ctl, - HASH_ELEM | HASH_BLOBS |HASH_CONTEXT); + HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); /* Watch for invalidation events. */ CacheRegisterRelcacheCallback(logicalrep_relmap_invalidate_cb, @@ -134,7 +134,7 @@ logicalrep_relmap_free_entry(LogicalRepRelMapEntry *entry) if (remoterel->natts > 0) { - int i; + int i; for (i = 0; i < remoterel->natts; i++) pfree(remoterel->attnames[i]); @@ -157,10 +157,10 @@ logicalrep_relmap_free_entry(LogicalRepRelMapEntry *entry) void logicalrep_relmap_update(LogicalRepRelation *remoterel) { - MemoryContext oldctx; - LogicalRepRelMapEntry *entry; - bool found; - int i; + MemoryContext oldctx; + LogicalRepRelMapEntry *entry; + bool found; + int i; if (LogicalRepRelMap == NULL) logicalrep_relmap_init(); @@ -202,7 +202,7 @@ logicalrep_relmap_update(LogicalRepRelation *remoterel) static int logicalrep_rel_att_by_name(LogicalRepRelation *remoterel, const char *attname) { - int i; + int i; for (i = 0; i < remoterel->natts; i++) { @@ -222,7 +222,7 @@ logicalrep_rel_att_by_name(LogicalRepRelation *remoterel, const char *attname) LogicalRepRelMapEntry * logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode) { - LogicalRepRelMapEntry *entry; + LogicalRepRelMapEntry *entry; bool found; if (LogicalRepRelMap == NULL) @@ -245,7 +245,8 @@ logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode) Bitmapset *idkey; TupleDesc desc; LogicalRepRelation *remoterel; - MemoryContext oldctx; + MemoryContext oldctx; + remoterel = &entry->remoterel; /* Try to find and lock the relation by name. */ @@ -265,8 +266,8 @@ logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode) /* * Build the mapping of local attribute numbers to remote attribute - * numbers and validate that we don't miss any replicated columns - * as that would result in potentially unwanted data loss. + * numbers and validate that we don't miss any replicated columns as + * that would result in potentially unwanted data loss. */ desc = RelationGetDescr(entry->localrel); oldctx = MemoryContextSwitchTo(LogicalRepRelMapContext); @@ -276,8 +277,9 @@ logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode) found = 0; for (i = 0; i < desc->natts; i++) { - int attnum = logicalrep_rel_att_by_name(remoterel, - NameStr(desc->attrs[i]->attname)); + int attnum = logicalrep_rel_att_by_name(remoterel, + NameStr(desc->attrs[i]->attname)); + entry->attrmap[i] = attnum; if (attnum >= 0) found++; @@ -287,9 +289,9 @@ logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode) if (found < remoterel->natts) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical replication target relation \"%s.%s\" is missing " - "some replicated columns", - remoterel->nspname, remoterel->relname))); + errmsg("logical replication target relation \"%s.%s\" is missing " + "some replicated columns", + remoterel->nspname, remoterel->relname))); /* * Check that replica identity matches. We allow for stricter replica @@ -299,8 +301,8 @@ logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode) * but in the opposite scenario it will. * * Don't throw any error here just mark the relation entry as not - * updatable, as replica identity is only for updates and deletes - * but inserts can be replicated even without it. + * updatable, as replica identity is only for updates and deletes but + * inserts can be replicated even without it. */ entry->updatable = true; idkey = RelationGetIndexAttrBitmap(entry->localrel, @@ -310,6 +312,7 @@ logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode) { idkey = RelationGetIndexAttrBitmap(entry->localrel, INDEX_ATTR_BITMAP_PRIMARY_KEY); + /* * If no replica identity index and no PK, the published table * must have replica identity FULL. @@ -321,14 +324,14 @@ logicalrep_rel_open(LogicalRepRelId remoteid, LOCKMODE lockmode) i = -1; while ((i = bms_next_member(idkey, i)) >= 0) { - int attnum = i + FirstLowInvalidHeapAttributeNumber; + int attnum = i + FirstLowInvalidHeapAttributeNumber; if (!AttrNumberIsForUserDefinedAttr(attnum)) ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), - errmsg("logical replication target relation \"%s.%s\" uses " - "system columns in REPLICA IDENTITY index", - remoterel->nspname, remoterel->relname))); + errmsg("logical replication target relation \"%s.%s\" uses " + "system columns in REPLICA IDENTITY index", + remoterel->nspname, remoterel->relname))); attnum = AttrNumberGetAttrOffset(attnum); @@ -371,7 +374,7 @@ static void logicalrep_typmap_invalidate_cb(Datum arg, int cacheid, uint32 hashvalue) { HASH_SEQ_STATUS status; - LogicalRepTyp *entry; + LogicalRepTyp *entry; /* Just to be sure. */ if (LogicalRepTypMap == NULL) @@ -402,9 +405,9 @@ logicalrep_typmap_free_entry(LogicalRepTyp *entry) void logicalrep_typmap_update(LogicalRepTyp *remotetyp) { - MemoryContext oldctx; - LogicalRepTyp *entry; - bool found; + MemoryContext oldctx; + LogicalRepTyp *entry; + bool found; if (LogicalRepTypMap == NULL) logicalrep_relmap_init(); @@ -433,9 +436,9 @@ logicalrep_typmap_update(LogicalRepTyp *remotetyp) Oid logicalrep_typmap_getid(Oid remoteid) { - LogicalRepTyp *entry; - bool found; - Oid nspoid; + LogicalRepTyp *entry; + bool found; + Oid nspoid; /* Internal types are mapped directly. */ if (remoteid < FirstNormalObjectId) |