Re: [PATCH] Add PQconninfoParseParams and PQconninfodefaultsMerge to libpq

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Re: [PATCH] Add PQconninfoParseParams and PQconninfodefaultsMerge to libpq
Дата
Msg-id 512520FE.6050701@vmware.com
обсуждение исходный текст
Ответ на Re: [PATCH] Add PQconninfoParseParams and PQconninfodefaultsMerge to libpq  (Amit Kapila <amit.kapila@huawei.com>)
Ответы Re: [PATCH] Add PQconninfoParseParams and PQconninfodefaultsMerge to libpq  (Phil Sorber <phil@omniti.com>)
Re: [PATCH] Add PQconninfoParseParams and PQconninfodefaultsMerge to libpq  (Amit Kapila <amit.kapila@huawei.com>)
Список pgsql-hackers
On 20.02.2013 11:42, Amit Kapila wrote:
> The patch for providing connection string for pg_basebackup, pg_receivexlog,
> pg_dump and pg_dumpall is attached with this mail.

Thanks. Now that I look at this patch, I realize that we don't actually
need these new functions for pg_basebackup and friends after all. We
already have PQconninfoParse(), we can just use that.

pg_dump can already take a connection string:

pg_dump "dbname=postgres port=5432"

For consistency with psql and other tools, perhaps we should add a "-d"
option to pg_dump, so that you could do:

pg_dump -d "dbname=postgres port=5432"

It'd be nice to call the option -d or --dbname in all the tools. That's
a bit confusing for pg_basebackup and pg_receivexlog, as it can *not*
actually be a database name, but it would be otherwise consistent with
the other commands.


I came up with the attached three patches. The first adds -d/--dbname
option to pg_basebackup and pg_receivexlog. The second adds it to
pg_dump, per above. The third adds it to pg_dumpall.

The third patch is a bit complicated. It first parses the user-specified
connection string using PQconninfoParse, so that it can merge in some
extra keywords: user, host, password, dbname and
fallback_application_name. It then calls PQconnectdbParams with the
keyword/value pairs. After making the initial connection to postgres or
template1 database, it calls PQconninfo() to again extract the
keyword/value pairs in effect in the connection, and constructs a new
connection string from them. That new connection string is then passed
to pg_dump on the command line, with the database name appended to it.

That seems to work, although it's perhaps a bit Rube Goldbergian. One
step of deparsing and parsing could be avoided by keeping the
keyword/value pairs from the first PQconninfoParse() call, instead of
constructing them again with PQconninfo(). I'll experiment with that
tomorrow.


The docs need some improvement. In those commands where you can't pass a
database name to the -d/--dbname option, only a connection string, I
kept your wording in the docs. But it ought to explain the seemingly
strange name for the option, and more. I'll take another whack at that
tomorrow as well.


Where does this leave the PQconninfoParseParams/PQconninfodefaultsMerge
patch? I'm not sure. Somehow I thought it would be necessary for this
work, but it wasn't. I didn't remember that we already have
PQconninfoParse() function, which was enough. So, what's the use case
for those functions?

- Heikki

Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Peter Eisentraut
Дата:
Сообщение: Re: Materialized views WIP patch
Следующее
От: Kevin Grittner
Дата:
Сообщение: Re: Materialized views WIP patch