1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-11 20:28:21 +03:00

postgres_fdw: Allow application_name of remote connection to be set via GUC.

This commit adds postgres_fdw.application_name GUC which specifies
a value for application_name configuration parameter used
when postgres_fdw establishes a connection to a foreign server.
This GUC setting always overrides application_name option of
the foreign server object. This GUC is useful when we want to
specify our own application_name per remote connection.

Previously application_name of a remote connection could be set
basically only via options of a server object. But which meant that
every session connecting to the same foreign server basically
should use the same application_name. Also if we want to change
the setting, we had to execute "ALTER SERVER ... OPTIONS ..." command.
It was inconvenient.

Author: Hayato Kuroda
Reviewed-by: Masahiro Ikeda, Fujii Masao
Discussion: https://postgr.es/m/TYCPR01MB5870D1E8B949DAF6D3B84E02F5F29@TYCPR01MB5870.jpnprd01.prod.outlook.com
This commit is contained in:
Fujii Masao
2021-09-07 12:27:30 +09:00
parent 4c3478859b
commit 449ab63505
6 changed files with 199 additions and 5 deletions

View File

@ -3422,3 +3422,42 @@ CREATE FOREIGN TABLE inv_fsz (c1 int )
-- Invalid batch_size option
CREATE FOREIGN TABLE inv_bsz (c1 int )
SERVER loopback OPTIONS (batch_size '100$%$#$#');
-- ===================================================================
-- test postgres_fdw.application_name GUC
-- ===================================================================
-- Turn debug_discard_caches off for this test to make that
-- the remote connection is alive when checking its application_name.
-- For each test, close all the existing cached connections manually and
-- establish connection with new setting of application_name.
SET debug_discard_caches = 0;
-- If appname is set as GUC but not as options of server object,
-- the GUC setting is used as application_name of remote connection.
SET postgres_fdw.application_name TO 'fdw_guc_appname';
SELECT 1 FROM postgres_fdw_disconnect_all();
SELECT 1 FROM ft6 LIMIT 1;
SELECT application_name FROM pg_stat_activity
WHERE application_name IN ('loopback2', 'fdw_guc_appname');
-- If appname is set as options of server object but not as GUC,
-- appname of server object is used.
RESET postgres_fdw.application_name;
ALTER SERVER loopback2 OPTIONS (ADD application_name 'loopback2');
SELECT 1 FROM postgres_fdw_disconnect_all();
SELECT 1 FROM ft6 LIMIT 1;
SELECT application_name FROM pg_stat_activity
WHERE application_name IN ('loopback2', 'fdw_guc_appname');
-- If appname is set both as GUC and as options of server object,
-- the GUC setting overrides appname of server object and is used.
SET postgres_fdw.application_name TO 'fdw_guc_appname';
SELECT 1 FROM postgres_fdw_disconnect_all();
SELECT 1 FROM ft6 LIMIT 1;
SELECT application_name FROM pg_stat_activity
WHERE application_name IN ('loopback2', 'fdw_guc_appname');
--Clean up
ALTER SERVER loopback2 OPTIONS (DROP application_name);
RESET postgres_fdw.application_name;
RESET debug_discard_caches;