From d76e3ccc3e30358bd8bf2442ad0e4e917c58f248 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Mon, 11 Nov 2019 15:56:17 +0100 Subject: [PATCH] Add server options to diagnostics --- .../CDB_FederatedServerDiagnostics.sql | 20 ++++++++++++++++++- test/CDB_FederatedServerDiagnostics.sql | 3 +++ test/CDB_FederatedServerDiagnostics_expect | 2 ++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/scripts-available/CDB_FederatedServerDiagnostics.sql b/scripts-available/CDB_FederatedServerDiagnostics.sql index 8f451af..e05732d 100644 --- a/scripts-available/CDB_FederatedServerDiagnostics.sql +++ b/scripts-available/CDB_FederatedServerDiagnostics.sql @@ -81,6 +81,22 @@ $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; +-- +-- Get the foreign server options of a remote PG server +-- +CREATE OR REPLACE FUNCTION @extschema@.__CDB_FS_Foreign_Server_Options_PG(server_internal name) +RETURNS jsonb +AS $$ + -- See https://www.postgresql.org/docs/current/catalog-pg-foreign-server.html + SELECT jsonb_object(server_options) FROM ( + SELECT ARRAY(SELECT regexp_split_to_table(opts, '=') + FROM pg_foreign_server, unnest(srvoptions) opts + WHERE srvname = cartodb.__CDB_FS_Generate_Server_Name(input_name => 'loopback', check_existence => true)) server_options + ) q; +$$ +LANGUAGE SQL VOLATILE PARALLEL UNSAFE; + + -- -- Collect and return diagnostics info from a remote PG into a jsonb -- @@ -90,10 +106,12 @@ AS $$ DECLARE remote_server_version text := @extschema@.__CDB_FS_Foreign_Server_Version_PG(server_internal); remote_postgis_version text := @extschema@.__CDB_FS_Foreign_PostGIS_Version_PG(server_internal); + remote_server_options jsonb := @extschema@.__CDB_FS_Foreign_Server_Options_PG(server_internal); BEGIN RETURN jsonb_build_object( 'server_version', remote_server_version, - 'postgis_version', remote_postgis_version + 'postgis_version', remote_postgis_version, + 'server_options', remote_server_options ); END $$ diff --git a/test/CDB_FederatedServerDiagnostics.sql b/test/CDB_FederatedServerDiagnostics.sql index ef0dbf1..f66e563 100644 --- a/test/CDB_FederatedServerDiagnostics.sql +++ b/test/CDB_FederatedServerDiagnostics.sql @@ -54,6 +54,9 @@ DROP EXTENSION postgis; \set QUIET off SELECT '1.5', cartodb.CDB_Federated_Server_Diagnostics(server => 'loopback') @> '{"postgis_version": null}'::jsonb; +\echo '%% It returns the remote server options' +SELECT '1.6', cartodb.CDB_Federated_Server_Diagnostics(server => 'loopback') @> '{"server_options": {"host": "localhost", "port": "5432", "updatable": "false", "extensions": "postgis", "fetch_size": "1000", "use_remote_estimate": "true"}}'::jsonb; + -- =================================================================== -- Cleanup diff --git a/test/CDB_FederatedServerDiagnostics_expect b/test/CDB_FederatedServerDiagnostics_expect index bff416f..2f1f7ae 100644 --- a/test/CDB_FederatedServerDiagnostics_expect +++ b/test/CDB_FederatedServerDiagnostics_expect @@ -9,4 +9,6 @@ ERROR: Server "doesNotExist" does not exist 1.4|t %% It returns null as the postgis version if it is not installed 1.5|t +%% It returns the remote server options +1.6|t D1|