mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
libpq: Add target_session_attrs parameter.
Commit 274bb2b385
made it possible to
specify multiple IPs in a connection string, but that's not good
enough for the case where you have a read-write master and a bunch of
read-only standbys and want to connect to whichever server is the
master at the current time. This commit allows that, by making it
possible to specify target_session_attrs=read-write as a connection
parameter.
There was extensive discussion of the best name for the connection
parameter and its values as well as the best way to distinguish master
and standbys. For now, adopt the same solution as JDBC: if the user
wants a read-write connection, issue 'show transaction_read_only' and
rejection the connection if the result is 'on'. In the future, we
could add additional values of this new target_session_attrs parameter
that issue different queries; or we might have some way of
distinguishing the server type without resorting to an SQL query; but
right now, we have this, and that's (hopefully) a good start.
Victor Wagner and Mithun Cy. Design review by Álvaro Herrera, Catalin
Iacob, Takayuki Tsunakawa, and Craig Ringer; code review by me. I
changed Mithun's patch to skip all remaining IPs for a host if we
reject a connection based on this new parameter, rewrote the
documentation, and did some other cosmetic cleanup.
Discussion: http://postgr.es/m/CAD__OuhqPRGpcsfwPHz_PDqAGkoqS1UvnUnOnAB-LBWBW=wu4A@mail.gmail.com
This commit is contained in:
@ -811,7 +811,7 @@ postgresql://localhost/mydb
|
||||
postgresql://user@localhost
|
||||
postgresql://user:secret@localhost
|
||||
postgresql://other@localhost/otherdb?connect_timeout=10&application_name=myapp
|
||||
postgresql://host1:123,host2:456/somedb
|
||||
postgresql://host1:123,host2:456/somedb?target_session_attrs=any&application_name=myapp
|
||||
</programlisting>
|
||||
Components of the hierarchical part of the <acronym>URI</acronym> can also
|
||||
be given as parameters. For example:
|
||||
@ -1386,6 +1386,23 @@ postgresql://%2Fvar%2Flib%2Fpostgresql/dbname
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="libpq-connect-target-session-attrs" xreflabel="target_session_attrs">
|
||||
<term><literal>target_session_attrs</literal></term>
|
||||
<listitem>
|
||||
<para>
|
||||
If this parameter is set to <literal>read-write</literal>, only a
|
||||
connection in which read-write transactions are accepted by default
|
||||
is considered acceptable. The query
|
||||
<literal>show transaction_read_only</literal> will be sent upon any
|
||||
successful connection; if it returns <literal>on</>, the connection
|
||||
will be closed. If multiple hosts were specified in the connection
|
||||
string, any remaining servers will be tried just as if the connection
|
||||
attempt had failed. The default value of this parameter,
|
||||
<literal>any</>, regards all connections as acceptable.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</sect2>
|
||||
@ -7069,6 +7086,16 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough)
|
||||
linkend="libpq-connect-client-encoding"> connection parameter.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
<indexterm>
|
||||
<primary><envar>PGTARGETSESSIONATTRS</envar></primary>
|
||||
</indexterm>
|
||||
<envar>PGTARGETSESSIONATTRS</envar> behaves the same as the <xref
|
||||
linkend="libpq-connect-target-session-attrs"> connection parameter.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
|
Reference in New Issue
Block a user