From: Heikki Linnakangas Date: Fri, 11 Jun 2010 10:13:09 +0000 (+0000) Subject: Use "replication" as the database name when constructing a connection X-Git-Tag: REL9_0_BETA3~134 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e751b71b56f1ba6fa3bb277059f9d5a8ea7b84af;p=postgresql Use "replication" as the database name when constructing a connection string for a streaming replication connection. It's ignored by the server, but allows libpq to pick up the password from .pgpass where "replication" is specified as the database name. Patch by Fujii Masao per Tom's suggestion, with some wording changes by me. --- diff --git a/doc/src/sgml/high-availability.sgml b/doc/src/sgml/high-availability.sgml index cc11ce69bd..2ac79245d0 100644 --- a/doc/src/sgml/high-availability.sgml +++ b/doc/src/sgml/high-availability.sgml @@ -1,4 +1,4 @@ - + High Availability, Load Balancing, and Replication @@ -818,8 +818,10 @@ host replication foo 192.168.1.100/32 md5 The host name and port number of the primary, connection user name, - and password are specified in the recovery.conf file or - the corresponding environment variable on the standby. + and password are specified in the recovery.conf file. + The password can also be set in the ~/.pgpass file on the + standby (specify replication in the database + field). For example, if the primary is running on host IP 192.168.1.50, port 5432, the superuser's name for replication is foo, and the password is foopass, the administrator diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 57357b18bb..646cb16cdd 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1,4 +1,4 @@ - + <application>libpq</application> - C Library @@ -6233,7 +6233,8 @@ myEventProc(PGEventId evtId, void *evtInfo, void *passThrough) A host name of localhost matches both TCP (host name localhost) and Unix domain socket (pghost empty or the default socket directory) connections coming from the local - machine. + machine. In a standby server, a database name of replication + matches streaming replication connections made to the master server. diff --git a/doc/src/sgml/recovery-config.sgml b/doc/src/sgml/recovery-config.sgml index 5bea0f37d6..d555960b80 100644 --- a/doc/src/sgml/recovery-config.sgml +++ b/doc/src/sgml/recovery-config.sgml @@ -1,4 +1,4 @@ - + Recovery Configuration @@ -268,9 +268,10 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows primary (see ). A password needs to be provided too, if the primary demands password - authentication. (The password can be provided either in - the primary_conninfo string or in a separate - ~/.pgpass file on the standby server.) + authentication. It can be provided in the + primary_conninfo string, or in a separate + ~/.pgpass file on the standby server (use + replication as the database name). Do not specify a database name in the primary_conninfo string. diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c index 1807fde9e4..b62f48be82 100644 --- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c +++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c,v 1.10 2010/04/21 03:32:53 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c,v 1.11 2010/06/11 10:13:09 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -77,7 +77,7 @@ _PG_init(void) static bool libpqrcv_connect(char *conninfo, XLogRecPtr startpoint) { - char conninfo_repl[MAXCONNINFO + 18]; + char conninfo_repl[MAXCONNINFO + 37]; char *primary_sysid; char standby_sysid[32]; TimeLineID primary_tli; @@ -85,8 +85,14 @@ libpqrcv_connect(char *conninfo, XLogRecPtr startpoint) PGresult *res; char cmd[64]; - /* Connect using deliberately undocumented parameter: replication */ - snprintf(conninfo_repl, sizeof(conninfo_repl), "%s replication=true", conninfo); + /* + * Connect using deliberately undocumented parameter: replication. + * The database name is ignored by the server in replication mode, but + * specify "replication" for .pgpass lookup. + */ + snprintf(conninfo_repl, sizeof(conninfo_repl), + "%s dbname=replication replication=true", + conninfo); streamConn = PQconnectdb(conninfo_repl); if (PQstatus(streamConn) != CONNECTION_OK)