From 80f01d4a51a2c8593f388e10f14eb784dc3743c4 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Fri, 8 Nov 2019 20:02:51 +0100 Subject: [PATCH] Implement retrieval of remote postgis version --- .../CDB_FederatedServerDiagnostics.sql | 32 +++++++++++++++++-- test/CDB_FederatedServerDiagnostics.sql | 4 +++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/scripts-available/CDB_FederatedServerDiagnostics.sql b/scripts-available/CDB_FederatedServerDiagnostics.sql index edc0851..5b327b2 100644 --- a/scripts-available/CDB_FederatedServerDiagnostics.sql +++ b/scripts-available/CDB_FederatedServerDiagnostics.sql @@ -41,12 +41,40 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; +-- +-- Get the PostGIS extension version of a remote PG server +-- CREATE OR REPLACE FUNCTION @extschema@.__CDB_FS_Foreign_PostGIS_Version_PG(server_internal name) RETURNS text AS $$ +DECLARE + -- Import pg_settings from pg_catalog + remote_schema name := 'pg_catalog'; + remote_table name := 'pg_extension'; + local_schema name := @extschema@.__CDB_FS_Create_Schema(server_internal, remote_schema); + role_name name := @extschema@.__CDB_FS_Generate_Server_Role_Name(server_internal); + remote_postgis_version text; BEGIN - -- TODO implement - RETURN '4.0'; + -- Import the foreign pg_extension table + IF NOT EXISTS ( + SELECT * FROM pg_class + WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = local_schema) + AND relname = remote_table + ) THEN + EXECUTE format('IMPORT FOREIGN SCHEMA %I LIMIT TO (%I) FROM SERVER %I INTO %I', + remote_schema, remote_table, server_internal, local_schema); + END IF; + + BEGIN + EXECUTE format(' + SELECT extversion FROM %I.%I WHERE extname = ''postgis''; + ', local_schema, remote_table) INTO remote_postgis_version; + EXCEPTION WHEN OTHERS THEN + RAISE EXCEPTION 'Not enough permissions to access the server "%"', + @extschema@.__CDB_FS_Extract_Server_Name(server_internal); + END; + + RETURN remote_postgis_version; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; diff --git a/test/CDB_FederatedServerDiagnostics.sql b/test/CDB_FederatedServerDiagnostics.sql index 864f012..e3b880c 100644 --- a/test/CDB_FederatedServerDiagnostics.sql +++ b/test/CDB_FederatedServerDiagnostics.sql @@ -22,6 +22,10 @@ SELECT 'C1', cartodb.CDB_Federated_Server_Register_PG(server => 'loopback'::text "password": "cdb_fs_passwd" } }'::jsonb); + +\c cdb_fs_tester postgres +CREATE EXTENSION postgis; +\c contrib_regression postgres \set QUIET off