From cf6c1fc0affdebc170f5ed10b63523d56a4d4c0c Mon Sep 17 00:00:00 2001 From: Masahiko Sawada Date: Fri, 12 Jun 2020 11:49:02 +0900 Subject: [PATCH v23 2/7] Recreate RemoveForeignServerById() 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 b33a2f94af..637269281b 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -1474,6 +1474,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: @@ -1488,7 +1492,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 de31ddd1f3..c002a61794 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 c26a102b17..89db18b7bc 100644 --- a/src/include/commands/defrem.h +++ b/src/include/commands/defrem.h @@ -128,6 +128,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.23.0