Re: Libpq support to connect to standby server as priority

Dave Cramer <pg@fastcrypt.com>

From: Dave Cramer <pg@fastcrypt.com>
To: Laurenz Albe <laurenz.albe@cybertec.at>
Cc: "Tsunakawa, Takayuki" <tsunakawa.takay@jp.fujitsu.com>, Tom Lane <tgl@sss.pgh.pa.us>, Robert Haas <robertmhaas@gmail.com>, Haribabu Kommi <kommi.haribabu@gmail.com>, Jing Wang <jingwangian@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2019-01-17T14:12:23Z
Lists: pgsql-hackers
On Thu, 17 Jan 2019 at 05:59, Laurenz Albe <laurenz.albe@cybertec.at> wrote:

> Tsunakawa, Takayuki wrote:
> > From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
> > > The problem here of course is that whoever invented
> target_session_attrs
> > > was unconcerned with following that precedent, so what we have is
> > > "target_session_attrs=(any | read-write)".
> > > Are we prepared to add some aliases in service of unifying these names?
> >
> > I think "yes".
> >
> > > 2. Whether or not you want to follow pgJDBC's naming, it seems like we
> > > ought to have both "require read only" and "prefer read only" behaviors
> > > in this patch, and maybe likewise "require read write" versus "prefer
> > > read write".
>

I just had a look at the JDBC code there is no prefer read write. There is
a "preferSecondary"
The logic behind this is that the connection would presumably be only doing
reads so ideally it would like a secondary,
but if it can't find one it will connect to a primary.

To be clear there are 4 target server types in pgJDBC, "any",
"master","secondary", and "preferSecondary" (looking at this I need to
alias master to primary, but that's another discussion)

I have no idea where "I want to write but I'm OK if I cannot came from"?

Dave

Commits

  1. Make test_target_session_attrs more robust against connection failure.

  2. Extend the abilities of libpq's target_session_attrs parameter.

  3. Mark default_transaction_read_only as GUC_REPORT.

  4. Introduce a new GUC_REPORT setting "in_hot_standby".

  5. Avoid spamming the client with multiple ParameterStatus messages.

  6. Avoid harmless Valgrind no-buffer-pin errors.

  7. Restructure libpq code to remove some duplicity

  8. libpq: Add target_session_attrs parameter.