pgsql: Extend the abilities of libpq's target_session_attrs parameter.

Started by Tom Laneover 5 years ago3 messagescomitters
Jump to latest
#1Tom Lane
tgl@sss.pgh.pa.us

Extend the abilities of libpq's target_session_attrs parameter.

In addition to the existing options of "any" and "read-write", we
now support "read-only", "primary", "standby", and "prefer-standby".
"read-write" retains its previous meaning of "transactions are
read-write by default", and "read-only" inverts that. The other
three modes test specifically for hot-standby status, which is not
quite the same thing. (Setting default_transaction_read_only on
a primary server renders it read-only to this logic, but not a
standby.)

Furthermore, if talking to a v14 or later server, no extra network
round trip is needed to detect the session's status; the GUC_REPORT
variables delivered by the server are enough. When talking to an
older server, a SHOW or SELECT query is issued to detect session
read-only-ness or server hot-standby state, as needed.

Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane; reviewed at
various times by Laurenz Albe, Takayuki Tsunakawa, Peter Smith.

Discussion: /messages/by-id/CAF3+xM+8-ztOkaV9gHiJ3wfgENTq97QcjXQt+rbFQ6F7oNzt9A@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/ee28cacf619f4d9c23af5a80e1171a5adae97381

Modified Files
--------------
doc/src/sgml/libpq.sgml | 79 ++++++--
src/interfaces/libpq/fe-connect.c | 352 ++++++++++++++++++++++++++--------
src/interfaces/libpq/fe-exec.c | 21 +-
src/interfaces/libpq/libpq-fe.h | 9 +-
src/interfaces/libpq/libpq-int.h | 27 ++-
src/test/recovery/t/001_stream_rep.pl | 82 +++++++-
6 files changed, 456 insertions(+), 114 deletions(-)

#2Michael Paquier
michael@paquier.xyz
In reply to: Tom Lane (#1)
Re: pgsql: Extend the abilities of libpq's target_session_attrs parameter.

On Wed, Mar 03, 2021 at 01:17:57AM +0000, Tom Lane wrote:

Extend the abilities of libpq's target_session_attrs parameter.

In addition to the existing options of "any" and "read-write", we
now support "read-only", "primary", "standby", and "prefer-standby".
"read-write" retains its previous meaning of "transactions are
read-write by default", and "read-only" inverts that. The other
three modes test specifically for hot-standby status, which is not
quite the same thing. (Setting default_transaction_read_only on
a primary server renders it read-only to this logic, but not a
standby.)

pgperlcritic is complaining after this commit:
./src/test/recovery/t/001_stream_rep.pl: Variable declared in
conditional statement at line 88, column 2. Declare variables outside
of the condition. ([Variables::ProhibitConditionalDeclarations]
Severity: 5)

perlcritic is picky on this one, but you could just separate that
stuff into two lines like in the attached.
--
Michael

Attachments:

recovery-perlcritic.patchtext/x-diff; charset=us-asciiDownload+2-1
#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michael Paquier (#2)
Re: pgsql: Extend the abilities of libpq's target_session_attrs parameter.

Michael Paquier <michael@paquier.xyz> writes:

perlcritic is picky on this one, but you could just separate that
stuff into two lines like in the attached.

Done like that, thanks for the advice.

regards, tom lane