From f310c9865000c6726baca7e7945a82bc61a4fc05 Mon Sep 17 00:00:00 2001 From: Masahiko Sawada Date: Fri, 12 Jun 2020 11:49:02 +0900 Subject: [PATCH v29 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 245c2f4fc8..3f97733656 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 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 7a079ef07f..737a14a22a 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.27.0