Allow specifying a dbname in pg_basebackup connection string
Jelte Fennema-Nio <postgres@jeltef.nl>
From: Jelte Fennema <postgres@jeltef.nl>
To: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2023-07-03T12:22:40Z
Lists: pgsql-hackers
Attachments
- v1-0001-Allow-specifying-a-dbname-in-pg_basebackup-connec.patch (application/octet-stream) patch v1-0001
Normally it doesn't really matter which dbname is used in the connection string that pg_basebackup and other physical replication CLI tools use. The reason being, that physical replication does not work at the database level, but instead at the server level. So you will always get the data for all databases. However, when there's a proxy, such as PgBouncer, in between the client and the server, then it might very well matter. Because this proxy might want to route the connection to a different server depending on the dbname parameter in the startup packet. This patch changes the creation of the connection string key value pairs, so that the following command will actually include dbname=postgres in the startup packet to the server: pg_basebackup --dbname 'dbname=postgres port=6432' -D dump This also applies to other physical replication CLI tools like pg_receivewal. To address the security issue described in CVE-2016-5424 it now only passes expand_dbname=true when the tool did not receive a connection_string argument. I tested that the change worked on this PgBouncer PR of mine: https://github.com/pgbouncer/pgbouncer/pull/876
Commits
-
pg_basebackup, pg_receivewal: fix failure to find password in ~/.pgpass.
- b1008c1f01ff 18.0 landed
- e2a912909308 17.1 landed
-
Allow dbname in pg_basebackup/pg_receivewal connstring
- cca97ce6a665 17.0 landed