diff --git a/scripts-available/CDB_FederatedServer.sql b/scripts-available/CDB_FederatedServer.sql index a5137c7..a0e6331 100644 --- a/scripts-available/CDB_FederatedServer.sql +++ b/scripts-available/CDB_FederatedServer.sql @@ -128,14 +128,18 @@ END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; -CREATE OR REPLACE FUNCTION cartodb.CDB_Federated_Server_Unregister(server TEXT) +CREATE OR REPLACE FUNCTION @extschema@.CDB_Federated_Server_Unregister(server TEXT) RETURNS void AS $$ DECLARE - final_name text := cartodb.__CDB_FS_Generate_Object_Name(server); + final_name text := @extschema@.__CDB_FS_Generate_Object_Name(server); BEGIN - -- TODO: Check if the server exists to show a nice error instead of the automatic one (which uses the implementation name) - EXECUTE 'DROP SERVER ' || quote_ident(final_name) || ' CASCADE'; + IF NOT EXISTS (SELECT * FROM pg_foreign_server WHERE srvname = final_name) + THEN + RAISE EXCEPTION 'Server "%" does not exist', server; + END IF; + + EXECUTE @extschema@._CDB_Drop_User_PG_FDW_Server(fdw_input_name := final_name, force := true); END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; diff --git a/scripts-available/CDB_ForeignTable.sql b/scripts-available/CDB_ForeignTable.sql index 9a772b4..a258c89 100644 --- a/scripts-available/CDB_ForeignTable.sql +++ b/scripts-available/CDB_ForeignTable.sql @@ -271,7 +271,7 @@ $$ LANGUAGE plpgsql VOLATILE PARALLEL UNSAFE; CREATE OR REPLACE FUNCTION @extschema@._CDB_Drop_User_PG_FDW_Server(fdw_input_name NAME, force boolean = false) RETURNS void AS $$ DECLARE - fdw_objects_name NAME := @extschema@.__CDB_User_FDW_Object_Names(fdw_input_name); + fdw_objects_name NAME := fdw_input_name; cascade_clause NAME; BEGIN CASE force diff --git a/test/CDB_FederatedServer.sql b/test/CDB_FederatedServer.sql index 32d4e7c..a445e73 100644 --- a/test/CDB_FederatedServer.sql +++ b/test/CDB_FederatedServer.sql @@ -38,6 +38,8 @@ SELECT '2.1', cartodb.CDB_Federated_Server_Register_PG(server := 'myRemote2'::te } }'::jsonb); SELECT '2.2', cartodb.CDB_Federated_Server_List_Servers(); +-- Check that CDB_Federated_Server_List_Servers works with name +SELECT '2.3', cartodb.CDB_Federated_Server_List_Servers(server := 'myRemote'); -- Re-register the second server diff --git a/test/CDB_FederatedServer_expect b/test/CDB_FederatedServer_expect index c7e8aec..768b271 100644 --- a/test/CDB_FederatedServer_expect +++ b/test/CDB_FederatedServer_expect @@ -3,8 +3,9 @@ 2.1| 2.2|(myRemote,postgres_fdw,localhost,5432,,read-only,fdw_user) 2.2|(myRemote2,postgres_fdw,localhost,5432,fdw_target,read-only,fdw_user) +2.3|(myRemote,postgres_fdw,localhost,5432,,read-only,fdw_user) 4.1| 4.2|(myRemote2,postgres_fdw,localhost,5432,fdw_target,read-only,fdw_user) -ERROR: server "cdb_fs_doesNotExist" does not exist +ERROR: Server "doesNotExist" does not exist 5.2|(myRemote2,postgres_fdw,localhost,5432,fdw_target,read-only,fdw_user) 6.1|