Re: pg_restore WAS Re: BUG #13702: pg_dump interprets “=” in a db name incorrectly - Mailing list pgsql-bugs

From Felipe Gasper
Subject Re: pg_restore WAS Re: BUG #13702: pg_dump interprets “=” in a db name incorrectly
Date
Msg-id 562A8271.400@felipegasper.com
Whole thread Raw
In response to Re: pg_restore WAS Re: [BUGS] BUG #13702: pg_dump interprets “=” in a db name incorrectly  ("David G. Johnston" <david.g.johnston@gmail.com>)
Responses Re: pg_restore WAS Re: [BUGS] BUG #13702: pg_dump interprets “=” in a db name incorrectly  ("David G. Johnston" <david.g.johnston@gmail.com>)
List pgsql-bugs
On 23 Oct 2015 1:33 PM, David G. Johnston wrote:
> On Fri, Oct 23, 2015 at 2:20 PM, Felipe Gasper <felipe@felipegasper.com
> <mailto:felipe@felipegasper.com>>wrote:
>
>     Apparently 9.0 can’t pg_restore DBs that have equals signs in
>     them...at least, such is the case with pg_restore on 9.0.18. It gets
>     confused by the “=”, even when it’s in the --dbname argument.
>
>     To me, that seems like a bug, as there’s no reason that the --dbname
>     argument should be interpreted as anything other than the name of a
>     database.
>
>     Does anyone here happen to know when pg_restore offered alternative
>     ways of specifying the database?
>
>     -FG
>
>     On 23 Oct 2015 7:45 AM, David Gould wrote:
>
>         On Thu, 22 Oct 2015 20:30:20 -0500
>         Felipe Gasper <felipe@felipegasper.com
>         <mailto:felipe@felipegasper.com>> wrote:
>
>             Interesting -- also, in 9.0 I *can* do:
>
>             dbname='...'
>
>             … and it works. Undocumented, apparently (?), but it does
>             the job.
>
>             But, I actually have to support all the way back to 8.1, and
>             I’m a bit
>             leery of relying on undocumented (?) features for our backup
>             functionality. Hopefully down the road we can just move
>             everything to
>                >=9.3, and peace and love will reign. :)
>
>
>         You can dump and load older version database from newer version
>         clients.
>         The dbname parsing problem you are having is on the client, not
>         the server,
>         so if you can arrange to take the backup with a more current
>         client then
>         one of the suggestions in this thread will work for you.
>
>
> ​It would help greatly if you post full command lines and error messages...

Sorry; I hope the following is more helpful.

>
> Again, the "--dbname" argument can either be an actual database name or
> a "connection info" object.

But the documentation doesn’t say that; it only says that it’s the name
of the database. Should the documentation be updated, then?

>  In the later case the "=" has a special
> meaning.  If your database has an "=" in its name then it seems like you
> have to use the "connection info" definition form.  Note I haven't dug
> into this with respect to pg_restore but that is the findings from the
> brief psql test I performed.

Is “connection info” an option with pg_restore, though, which mandates a
--dbname argument?

Here is the execve from strace:

------------
[pid 21172] execve("/usr/local/pgsql/bin/pg_restore",
["/usr/local/pgsql/bin/pg_restore", "--username=postgres",
"--host=/tmp/TMP.work.mVasksDJkt0CEJJh/socket", "--no-privileges",
"--no-owner", "-d", "weird  alpha_0123~-_=+[{]}\\\\;:,<.>?",
"--single-transaction", "--role", "weird
alpha_0123~-_=+[{]}\\\\;:,<.>?"], [/* 8 vars */]) = 0
------------

It spits out the following on STDERR:

-------------
[archiver (db)] connection to database "" failed: missing "=" after
"weird" in connection info string
-------------

It makes sense that the “=” would be interpreted as a special character
in pg_dump when there is no --dbname parameter. But the docs say that
--dbname is for a database name; there is no mention of any kind of
parsing otherwise. Should it not work that way? What purpose is served
by passing configuration parameters in the database name?

This does work with 9.4 when I use the “postgres:///…” syntax; however,
as we’re stuck supporting older PgSQLs for the time being (*sigh* even
back to 8.1), and as PGDATABASE doesn’t work with pg_restore, are we
left with having to prohibit “=” in database names?

-FG



pgsql-bugs by date:

Previous
From: "David G. Johnston"
Date:
Subject: Re: pg_restore WAS Re: [BUGS] BUG #13702: pg_dump interprets “=” in a db name incorrectly
Next
From: "David G. Johnston"
Date:
Subject: Re: pg_restore WAS Re: [BUGS] BUG #13702: pg_dump interprets “=” in a db name incorrectly