CDB_Federated_Server_Unregister: Better error handling

This commit is contained in:
Raul Marin
2019-10-29 12:24:54 +01:00
parent f285c806fc
commit 1375894e99
4 changed files with 13 additions and 6 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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|