Extend the abilities of libpq's target_session_attrs parameter.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 3 Mar 2021 01:17:45 +0000 (20:17 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 3 Mar 2021 01:17:48 +0000 (20:17 -0500)
commitee28cacf619f4d9c23af5a80e1171a5adae97381
treedda36f982a797351cb56e3baf188a775f985512a
parent57e6db706e81fd2609fa385677e6ae72471822fe
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: https://postgr.es/m/CAF3+xM+8-ztOkaV9gHiJ3wfgENTq97QcjXQt+rbFQ6F7oNzt9A@mail.gmail.com
doc/src/sgml/libpq.sgml
src/interfaces/libpq/fe-connect.c
src/interfaces/libpq/fe-exec.c
src/interfaces/libpq/libpq-fe.h
src/interfaces/libpq/libpq-int.h
src/test/recovery/t/001_stream_rep.pl