diff options
author | Joe Conway <mail@joeconway.com> | 2010-02-05 03:09:05 +0000 |
---|---|---|
committer | Joe Conway <mail@joeconway.com> | 2010-02-05 03:09:05 +0000 |
commit | f419a82c704ec33fe5b861f914935b233a54bcee (patch) | |
tree | 4c32bd4b142b4c76d6fa17e403eaa189df835e7b /src/bin/pg_dump/pg_backup_db.c | |
parent | a141ec13de1b2ee4ff7ec1e6b0da03ce7eb7dbbb (diff) | |
download | postgresql-f419a82c704ec33fe5b861f914935b233a54bcee.tar.gz postgresql-f419a82c704ec33fe5b861f914935b233a54bcee.zip |
Modify recently added PQconnectdbParams() with new argument, expand_dbname.
If expand_dbname is non-zero and dbname contains an = sign, it is taken as
a conninfo string in exactly the same way as if it had been passed to
PQconnectdb. This is equivalent to the way PQsetdbLogin() works, allowing
PQconnectdbParams() to be a complete alternative.
Also improve the way the new function is called from psql and replace a
previously missed call to PQsetdbLogin() in psql. Additionally use
PQconnectdbParams() for pg_dump and friends, and the bin/scripts
command line utilities such as vacuumdb, createdb, etc.
Finally, update the documentation for the new parameter, as well as the
nuances of precedence in cases where key words are repeated or duplicated
in the conninfo string.
Diffstat (limited to 'src/bin/pg_dump/pg_backup_db.c')
-rw-r--r-- | src/bin/pg_dump/pg_backup_db.c | 61 |
1 files changed, 55 insertions, 6 deletions
diff --git a/src/bin/pg_dump/pg_backup_db.c b/src/bin/pg_dump/pg_backup_db.c index 1d72d6dd7e2..4aa10135bb0 100644 --- a/src/bin/pg_dump/pg_backup_db.c +++ b/src/bin/pg_dump/pg_backup_db.c @@ -5,7 +5,7 @@ * Implements the basic DB functions used by the archiver. * * IDENTIFICATION - * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.85 2009/12/14 00:39:11 itagaki Exp $ + * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.86 2010/02/05 03:09:05 joe Exp $ * *------------------------------------------------------------------------- */ @@ -154,10 +154,34 @@ _connectDB(ArchiveHandle *AH, const char *reqdb, const char *requser) do { +#define PARAMS_ARRAY_SIZE 7 + const char **keywords = malloc(PARAMS_ARRAY_SIZE * sizeof(*keywords)); + const char **values = malloc(PARAMS_ARRAY_SIZE * sizeof(*values)); + + if (!keywords || !values) + die_horribly(AH, modulename, "out of memory\n"); + + keywords[0] = "host"; + values[0] = PQhost(AH->connection); + keywords[1] = "port"; + values[1] = PQport(AH->connection); + keywords[2] = "user"; + values[2] = newuser; + keywords[3] = "password"; + values[3] = password; + keywords[4] = "dbname"; + values[4] = newdb; + keywords[5] = "fallback_application_name"; + values[5] = progname; + keywords[6] = NULL; + values[6] = NULL; + new_pass = false; - newConn = PQsetdbLogin(PQhost(AH->connection), PQport(AH->connection), - NULL, NULL, newdb, - newuser, password); + newConn = PQconnectdbParams(keywords, values, true); + + free(keywords); + free(values); + if (!newConn) die_horribly(AH, modulename, "failed to reconnect to database\n"); @@ -237,9 +261,33 @@ ConnectDatabase(Archive *AHX, */ do { +#define PARAMS_ARRAY_SIZE 7 + const char **keywords = malloc(PARAMS_ARRAY_SIZE * sizeof(*keywords)); + const char **values = malloc(PARAMS_ARRAY_SIZE * sizeof(*values)); + + if (!keywords || !values) + die_horribly(AH, modulename, "out of memory\n"); + + keywords[0] = "host"; + values[0] = pghost; + keywords[1] = "port"; + values[1] = pgport; + keywords[2] = "user"; + values[2] = username; + keywords[3] = "password"; + values[3] = password; + keywords[4] = "dbname"; + values[4] = dbname; + keywords[5] = "fallback_application_name"; + values[5] = progname; + keywords[6] = NULL; + values[6] = NULL; + new_pass = false; - AH->connection = PQsetdbLogin(pghost, pgport, NULL, NULL, - dbname, username, password); + AH->connection = PQconnectdbParams(keywords, values, true); + + free(keywords); + free(values); if (!AH->connection) die_horribly(AH, modulename, "failed to connect to database\n"); @@ -697,3 +745,4 @@ _isDQChar(unsigned char c, bool atStart) else return false; } + |