Add CDB_Federated_Server_List_Registered_Tables
This commit is contained in:
@@ -185,8 +185,39 @@ DECLARE
|
|||||||
local_schema name := @extschema@.__CDB_FS_Create_Schema(server_internal, remote_schema);
|
local_schema name := @extschema@.__CDB_FS_Create_Schema(server_internal, remote_schema);
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE FORMAT ('DROP FOREIGN TABLE %I.%I CASCADE;', local_schema, remote_table);
|
EXECUTE FORMAT ('DROP FOREIGN TABLE %I.%I CASCADE;', local_schema, remote_table);
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION @extschema@.CDB_Federated_Server_List_Registered_Tables(
|
||||||
|
server TEXT,
|
||||||
|
remote_schema TEXT
|
||||||
|
)
|
||||||
|
RETURNS TABLE(remote_name TEXT, local_name TEXT)
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
server_internal name := @extschema@.__CDB_FS_Generate_Server_Name(input_name := server, check_existence := false);
|
||||||
|
local_schema name := @extschema@.__CDB_FS_Create_Schema(server_internal, remote_schema);
|
||||||
|
BEGIN
|
||||||
|
RETURN QUERY SELECT
|
||||||
|
source_table::text as remote_table,
|
||||||
|
format('%I.%I', dependent_schema, dependent_view)::text as local_view
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT DISTINCT
|
||||||
|
dependent_ns.nspname as dependent_schema,
|
||||||
|
dependent_view.relname as dependent_view,
|
||||||
|
source_table.relname as source_table
|
||||||
|
FROM pg_depend
|
||||||
|
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid
|
||||||
|
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid
|
||||||
|
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid
|
||||||
|
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
|
||||||
|
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
|
||||||
|
WHERE
|
||||||
|
source_ns.nspname = local_schema
|
||||||
|
ORDER BY 1,2
|
||||||
|
) _aux;
|
||||||
END
|
END
|
||||||
$$
|
$$
|
||||||
LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE;
|
LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE;
|
||||||
|
|||||||
@@ -65,6 +65,11 @@ SELECT 'R1', cartodb.CDB_Federated_Table_Register(
|
|||||||
SELECT 'V1', pg_get_viewdef('remote_geom');
|
SELECT 'V1', pg_get_viewdef('remote_geom');
|
||||||
SELECT 'S1', cartodb_id, ST_AsText(the_geom), another_field FROM remote_geom;
|
SELECT 'S1', cartodb_id, ST_AsText(the_geom), another_field FROM remote_geom;
|
||||||
|
|
||||||
|
Select 'list_remotes1', CDB_Federated_Server_List_Registered_Tables(
|
||||||
|
server => 'loopback',
|
||||||
|
remote_schema => 'remote_schema'
|
||||||
|
);
|
||||||
|
|
||||||
SELECT 'R2', cartodb.CDB_Federated_Table_Register(
|
SELECT 'R2', cartodb.CDB_Federated_Table_Register(
|
||||||
server => 'loopback',
|
server => 'loopback',
|
||||||
remote_schema => 'remote_schema',
|
remote_schema => 'remote_schema',
|
||||||
@@ -78,6 +83,11 @@ SELECT 'R2', cartodb.CDB_Federated_Table_Register(
|
|||||||
SELECT 'V2', pg_get_viewdef('"myFullTable"');
|
SELECT 'V2', pg_get_viewdef('"myFullTable"');
|
||||||
SELECT 'S2', cartodb_id, ST_AsText(the_geom_webmercator), another_field FROM "myFullTable";
|
SELECT 'S2', cartodb_id, ST_AsText(the_geom_webmercator), another_field FROM "myFullTable";
|
||||||
|
|
||||||
|
Select 'list_remotes2', CDB_Federated_Server_List_Registered_Tables(
|
||||||
|
server => 'loopback',
|
||||||
|
remote_schema => 'remote_schema'
|
||||||
|
);
|
||||||
|
|
||||||
SELECT 'U1', CDB_Federated_Table_Unregister(
|
SELECT 'U1', CDB_Federated_Table_Unregister(
|
||||||
server => 'loopback',
|
server => 'loopback',
|
||||||
remote_schema => 'remote_schema',
|
remote_schema => 'remote_schema',
|
||||||
@@ -86,7 +96,10 @@ SELECT 'U1', CDB_Federated_Table_Unregister(
|
|||||||
-- Selecting from the created view should fail now
|
-- Selecting from the created view should fail now
|
||||||
SELECT 'UCheck1', cartodb_id, ST_AsText(the_geom), another_field FROM remote_geom;
|
SELECT 'UCheck1', cartodb_id, ST_AsText(the_geom), another_field FROM remote_geom;
|
||||||
|
|
||||||
|
Select 'list_remotes3', CDB_Federated_Server_List_Registered_Tables(
|
||||||
|
server => 'loopback',
|
||||||
|
remote_schema => 'remote_schema'
|
||||||
|
);
|
||||||
|
|
||||||
-- ===================================================================
|
-- ===================================================================
|
||||||
-- Cleanup
|
-- Cleanup
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ V1| SELECT t.id AS cartodb_id,
|
|||||||
FROM cdb_fs_schema_b904664b5208433cd85a1693ba4f7570.remote_geom t;
|
FROM cdb_fs_schema_b904664b5208433cd85a1693ba4f7570.remote_geom t;
|
||||||
S1|1|POINT(1 1)|patata
|
S1|1|POINT(1 1)|patata
|
||||||
S1|2|POINT(2 2)|patata2
|
S1|2|POINT(2 2)|patata2
|
||||||
|
list_remotes1|(remote_geom,public.remote_geom)
|
||||||
R2|
|
R2|
|
||||||
V2| SELECT t.id AS cartodb_id,
|
V2| SELECT t.id AS cartodb_id,
|
||||||
t.geom AS the_geom,
|
t.geom AS the_geom,
|
||||||
@@ -14,6 +15,9 @@ V2| SELECT t.id AS cartodb_id,
|
|||||||
t.another_field
|
t.another_field
|
||||||
FROM cdb_fs_schema_b904664b5208433cd85a1693ba4f7570.remote_geom2 t;
|
FROM cdb_fs_schema_b904664b5208433cd85a1693ba4f7570.remote_geom2 t;
|
||||||
S2|3|POINT(3 3)|patata
|
S2|3|POINT(3 3)|patata
|
||||||
|
list_remotes2|(remote_geom2,"public.""myFullTable""")
|
||||||
|
list_remotes2|(remote_geom,public.remote_geom)
|
||||||
U1|
|
U1|
|
||||||
ERROR: relation "remote_geom" does not exist at character 71
|
ERROR: relation "remote_geom" does not exist at character 71
|
||||||
|
list_remotes3|(remote_geom2,"public.""myFullTable""")
|
||||||
D1|
|
D1|
|
||||||
|
|||||||
Reference in New Issue
Block a user