diff options
Diffstat (limited to 'src/backend/replication/logical/relation.c')
-rw-r--r-- | src/backend/replication/logical/relation.c | 106 |
1 files changed, 1 insertions, 105 deletions
diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c index 2c1313ba52c..16f4c56bfd7 100644 --- a/src/backend/replication/logical/relation.c +++ b/src/backend/replication/logical/relation.c @@ -17,7 +17,6 @@ #include "postgres.h" #include "access/relation.h" -#include "access/sysattr.h" #include "access/table.h" #include "catalog/namespace.h" #include "catalog/pg_subscription_rel.h" @@ -25,16 +24,12 @@ #include "nodes/makefuncs.h" #include "replication/logicalrelation.h" #include "replication/worker_internal.h" -#include "utils/builtins.h" #include "utils/inval.h" -#include "utils/lsyscache.h" -#include "utils/memutils.h" -#include "utils/syscache.h" + static MemoryContext LogicalRepRelMapContext = NULL; static HTAB *LogicalRepRelMap = NULL; -static HTAB *LogicalRepTypMap = NULL; /* @@ -101,16 +96,6 @@ logicalrep_relmap_init(void) LogicalRepRelMap = hash_create("logicalrep relation map cache", 128, &ctl, HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); - /* Initialize the type hash table. */ - MemSet(&ctl, 0, sizeof(ctl)); - ctl.keysize = sizeof(Oid); - ctl.entrysize = sizeof(LogicalRepTyp); - ctl.hcxt = LogicalRepRelMapContext; - - /* This will usually be small. */ - LogicalRepTypMap = hash_create("logicalrep type map cache", 2, &ctl, - HASH_ELEM | HASH_BLOBS | HASH_CONTEXT); - /* Watch for invalidation events. */ CacheRegisterRelcacheCallback(logicalrep_relmap_invalidate_cb, (Datum) 0); @@ -399,92 +384,3 @@ logicalrep_rel_close(LogicalRepRelMapEntry *rel, LOCKMODE lockmode) table_close(rel->localrel, lockmode); rel->localrel = NULL; } - -/* - * Free the type map cache entry data. - */ -static void -logicalrep_typmap_free_entry(LogicalRepTyp *entry) -{ - pfree(entry->nspname); - pfree(entry->typname); -} - -/* - * Add new entry or update existing entry in the type map cache. - */ -void -logicalrep_typmap_update(LogicalRepTyp *remotetyp) -{ - MemoryContext oldctx; - LogicalRepTyp *entry; - bool found; - - if (LogicalRepTypMap == NULL) - logicalrep_relmap_init(); - - /* - * HASH_ENTER returns the existing entry if present or creates a new one. - */ - entry = hash_search(LogicalRepTypMap, (void *) &remotetyp->remoteid, - HASH_ENTER, &found); - - if (found) - logicalrep_typmap_free_entry(entry); - - /* Make cached copy of the data */ - entry->remoteid = remotetyp->remoteid; - oldctx = MemoryContextSwitchTo(LogicalRepRelMapContext); - entry->nspname = pstrdup(remotetyp->nspname); - entry->typname = pstrdup(remotetyp->typname); - MemoryContextSwitchTo(oldctx); -} - -/* - * Fetch type name from the cache by remote type OID. - * - * Return a substitute value if we cannot find the data type; no message is - * sent to the log in that case, because this is used by error callback - * already. - */ -char * -logicalrep_typmap_gettypname(Oid remoteid) -{ - LogicalRepTyp *entry; - bool found; - - /* Internal types are mapped directly. */ - if (remoteid < FirstGenbkiObjectId) - { - if (!get_typisdefined(remoteid)) - { - /* - * This can be caused by having a publisher with a higher - * PostgreSQL major version than the subscriber. - */ - return psprintf("unrecognized %u", remoteid); - } - - return format_type_be(remoteid); - } - - if (LogicalRepTypMap == NULL) - { - /* - * If the typemap is not initialized yet, we cannot possibly attempt - * to search the hash table; but there's no way we know the type - * locally yet, since we haven't received a message about this type, - * so this is the best we can do. - */ - return psprintf("unrecognized %u", remoteid); - } - - /* search the mapping */ - entry = hash_search(LogicalRepTypMap, (void *) &remoteid, - HASH_FIND, &found); - if (!found) - return psprintf("unrecognized %u", remoteid); - - Assert(OidIsValid(entry->remoteid)); - return psprintf("%s.%s", entry->nspname, entry->typname); -} |