From 2f028809a370b832832aea66384a984bd9999bf9 Mon Sep 17 00:00:00 2001 From: Masahiko Sawada Date: Fri, 12 Jun 2020 11:49:02 +0900 Subject: [PATCH v34 03/11] Recreate RemoveForeignServerById() This commit recreates RemoveForeignServerById that was removed by b1d32d3e3. This is necessary for follow up commit that checks if the foreign server has prepared transaction or not when removing. Co-authored-by: Masahiko Sawada, Ashutosh Bapat --- src/backend/catalog/dependency.c | 5 ++++- src/backend/commands/foreigncmds.c | 22 ++++++++++++++++++++++ src/include/commands/defrem.h | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 2140151a6a..7c9899f14d 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -1549,6 +1549,10 @@ doDeletion(const ObjectAddress *object, int flags) RemovePublicationRelById(object->objectId); break; + case OCLASS_FOREIGN_SERVER: + RemoveForeignServerById(object->objectId); + break; + case OCLASS_CAST: case OCLASS_COLLATION: case OCLASS_CONVERSION: @@ -1563,7 +1567,6 @@ doDeletion(const ObjectAddress *object, int flags) case OCLASS_TSDICT: case OCLASS_TSTEMPLATE: case OCLASS_FDW: - case OCLASS_FOREIGN_SERVER: case OCLASS_USER_MAPPING: case OCLASS_DEFACL: case OCLASS_EVENT_TRIGGER: diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index eb7103fd3b..ec024fa106 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -1060,6 +1060,28 @@ AlterForeignServer(AlterForeignServerStmt *stmt) return address; } +/* + * Drop foreign server by OID + */ +void +RemoveForeignServerById(Oid srvId) +{ + HeapTuple tp; + Relation rel; + + rel = table_open(ForeignServerRelationId, RowExclusiveLock); + + tp = SearchSysCache1(FOREIGNSERVEROID, ObjectIdGetDatum(srvId)); + + if (!HeapTupleIsValid(tp)) + elog(ERROR, "cache lookup failed for foreign server %u", srvId); + + CatalogTupleDelete(rel, &tp->t_self); + + ReleaseSysCache(tp); + + table_close(rel, RowExclusiveLock); +} /* * Common routine to check permission for user-mapping-related DDL diff --git a/src/include/commands/defrem.h b/src/include/commands/defrem.h index 1a79540c94..07a3f76bb4 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -125,6 +125,7 @@ extern ObjectAddress CreateForeignDataWrapper(CreateFdwStmt *stmt); extern ObjectAddress AlterForeignDataWrapper(AlterFdwStmt *stmt); extern ObjectAddress CreateForeignServer(CreateForeignServerStmt *stmt); extern ObjectAddress AlterForeignServer(AlterForeignServerStmt *stmt); +extern void RemoveForeignServerById(Oid srvId); extern ObjectAddress CreateUserMapping(CreateUserMappingStmt *stmt); extern ObjectAddress AlterUserMapping(AlterUserMappingStmt *stmt); extern Oid RemoveUserMapping(DropUserMappingStmt *stmt); -- 2.27.0