mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +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:
@ -10761,3 +10761,82 @@ ERROR: invalid value for integer option "fetch_size": 100$%$#$#
|
||||
CREATE FOREIGN TABLE inv_bsz (c1 int )
|
||||
SERVER loopback OPTIONS (batch_size '100$%$#$#');
|
||||
ERROR: invalid value for integer option "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();
|
||||
?column?
|
||||
----------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT 1 FROM ft6 LIMIT 1;
|
||||
?column?
|
||||
----------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT application_name FROM pg_stat_activity
|
||||
WHERE application_name IN ('loopback2', 'fdw_guc_appname');
|
||||
application_name
|
||||
------------------
|
||||
fdw_guc_appname
|
||||
(1 row)
|
||||
|
||||
-- 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();
|
||||
?column?
|
||||
----------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT 1 FROM ft6 LIMIT 1;
|
||||
?column?
|
||||
----------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT application_name FROM pg_stat_activity
|
||||
WHERE application_name IN ('loopback2', 'fdw_guc_appname');
|
||||
application_name
|
||||
------------------
|
||||
loopback2
|
||||
(1 row)
|
||||
|
||||
-- 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();
|
||||
?column?
|
||||
----------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT 1 FROM ft6 LIMIT 1;
|
||||
?column?
|
||||
----------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
SELECT application_name FROM pg_stat_activity
|
||||
WHERE application_name IN ('loopback2', 'fdw_guc_appname');
|
||||
application_name
|
||||
------------------
|
||||
fdw_guc_appname
|
||||
(1 row)
|
||||
|
||||
--Clean up
|
||||
ALTER SERVER loopback2 OPTIONS (DROP application_name);
|
||||
RESET postgres_fdw.application_name;
|
||||
RESET debug_discard_caches;
|
||||
|
Reference in New Issue
Block a user