Re: [PATCH] postgres_fdw connection caching - cause remote sessionslinger till the local session exit

Поиск
Список
Период
Сортировка
От David G. Johnston
Тема Re: [PATCH] postgres_fdw connection caching - cause remote sessionslinger till the local session exit
Дата
Msg-id CAKFQuwb5QQCZ6MpKH42t0x2WCP128WKW3MHDn587p944jLHDEg@mail.gmail.com
обсуждение исходный текст
Ответ на [PATCH] postgres_fdw connection caching - cause remote sessionslinger till the local session exit  (Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>)
Ответы Re: [PATCH] postgres_fdw connection caching - cause remote sessionslinger till the local session exit  (Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>)
Список pgsql-hackers
On Sun, Jun 21, 2020 at 10:56 PM Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com> wrote:
When a query on foreign table is executed from a local session using
postgres_fdw, as expected the local postgres backend opens a
connection which causes a remote session/backend to be opened on the
remote postgres server for query execution.

[...]
 
I propose to have a new session level GUC called
"enable_connectioncache"(name can be changed if it doesn't correctly
mean the purpose) with the default value being true which means that
all the remote connections are cached. If set to false, the
connections are not cached and so are remote sessions closed by the local backend/session at
the end of each remote transaction.

[...] 
Thoughts?

Test Case:
without patch:
1. Run the query on foreign table
2. Look for the backend/session opened on the remote postgres server, it exists till the local session remains active.

with patch:
1. SET enable_connectioncache TO false;
2. Run the query on the foreign table
3. Look for the backend/session opened on the remote postgres server, it should not exist.

If this is just going to apply to postgres_fdw why not just have that module provide a function "disconnect_open_sessions()" or the like that does this upon user command?  I suppose there would be some potential value to having this be set per-user but that wouldn't preclude the usefulness of a function.   And by having a function the usefulness of the GUC seems reduced.  On a related note is there any entanglement here with the supplied dblink and/or dblink_fdw [1] modules as they do provide connect and disconnect functions and also leverages postgres_fdw (or dblink_fdw if specified, which brings us back to the question of whether this option should be respected by that FDW).

Otherwise, I would imagine that having multiple queries execute before wanting to drop the connection would be desirable so at minimum a test case that does something like:

SELECT count(*) FROM remote.tbl1;
-- connection still open
SET enable_connectioncache TO false;
SELECT count(*) FROM remote.tbl2;
-- now it was closed

Or maybe even better, have the close action happen on a transaction boundary.

And if it doesn't just apply to postgres_fdw (or at least doesn't have to) then the description text should be less specific.

David J.

[1] The only place I see "dblink_fdw" in the documentation is in the dblink module's dblink_connect page.  I would probably modify that page to say:
"It is recommended to use the foreign-data wrapper dblink_fdw (installed by this module) when defining the foreign server." (adding the parenthetical).

В списке pgsql-hackers по дате отправления:

Предыдущее
От: vignesh C
Дата:
Сообщение: Re: [PATCH] postgres_fdw connection caching - cause remote sessionslinger till the local session exit
Следующее
От: Bharath Rupireddy
Дата:
Сообщение: Re: [PATCH] Remove Extra palloc Of raw_buf For Binary Format In COPY FROM