diff options
Diffstat (limited to 'src/backend/commands/amcmds.c')
-rw-r--r-- | src/backend/commands/amcmds.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/backend/commands/amcmds.c b/src/backend/commands/amcmds.c index f2173450ad3..4367290a27c 100644 --- a/src/backend/commands/amcmds.c +++ b/src/backend/commands/amcmds.c @@ -15,6 +15,7 @@ #include "access/heapam.h" #include "access/htup_details.h" +#include "catalog/catalog.h" #include "catalog/dependency.h" #include "catalog/indexing.h" #include "catalog/pg_am.h" @@ -60,7 +61,8 @@ CreateAccessMethod(CreateAmStmt *stmt) errhint("Must be superuser to create an access method."))); /* Check if name is used */ - amoid = GetSysCacheOid1(AMNAME, CStringGetDatum(stmt->amname)); + amoid = GetSysCacheOid1(AMNAME, Anum_pg_am_oid, + CStringGetDatum(stmt->amname)); if (OidIsValid(amoid)) { ereport(ERROR, @@ -80,6 +82,8 @@ CreateAccessMethod(CreateAmStmt *stmt) memset(values, 0, sizeof(values)); memset(nulls, false, sizeof(nulls)); + amoid = GetNewOidWithIndex(rel, AmOidIndexId, Anum_pg_am_oid); + values[Anum_pg_am_oid - 1] = ObjectIdGetDatum(amoid); values[Anum_pg_am_amname - 1] = DirectFunctionCall1(namein, CStringGetDatum(stmt->amname)); values[Anum_pg_am_amhandler - 1] = ObjectIdGetDatum(amhandler); @@ -87,7 +91,7 @@ CreateAccessMethod(CreateAmStmt *stmt) tup = heap_form_tuple(RelationGetDescr(rel), values, nulls); - amoid = CatalogTupleInsert(rel, tup); + CatalogTupleInsert(rel, tup); heap_freetuple(tup); myself.classId = AccessMethodRelationId; @@ -164,7 +168,7 @@ get_am_type_oid(const char *amname, char amtype, bool missing_ok) NameStr(amform->amname), get_am_type_string(amtype)))); - oid = HeapTupleGetOid(tup); + oid = amform->oid; ReleaseSysCache(tup); } |