Обсуждение: pg_dump -t '"Table"' for cmd.exe

Поиск
Список
Период
Сортировка

pg_dump -t '"Table"' for cmd.exe

От
Mike Toews
Дата:
I'm not sure if this is worth documenting, but pg_dumping mixed-case tables with the '-t table' option appears to not be accurately documented for cmd.exe. Here are my four attempts, with only the last as success:

Intuitive (supplying "My Table" like "My Database"), but not correct:
C:\>"C:\Program Files\PostgreSQL\9.1\bin\pg_dump.exe" -U postgres -t "My Table" "My Database"
pg_dump: No matching tables were found

C:\>"C:\Program Files\PostgreSQL\9.1\bin\pg_dump.exe" -U postgres -t '"My Table"' "My Database"
pg_dump: No matching tables were found

Escaping quotes, but using single quotes:
C:\>"C:\Program Files\PostgreSQL\9.1\bin\pg_dump.exe" -U postgres -t '\"My Table\"' "My Database"
pg_dump: too many command-line arguments (first is "My Database")

Escaping quotes, but using double quotes:
C:\>"C:\Program Files\PostgreSQL\9.1\bin\pg_dump.exe" -U postgres -t "\"My Table\"" "My Database"

works!

-Mike

Re: pg_dump -t '"Table"' for cmd.exe

От
Josh Kupershmidt
Дата:
On Mon, Nov 12, 2012 at 8:45 PM, Mike Toews <mwtoews@gmail.com> wrote:
> I'm not sure if this is worth documenting, but pg_dumping mixed-case tables
> with the '-t table' option appears to not be accurately documented for
> cmd.exe. Here are my four attempts, with only the last as success:

I believe this complaint is basically the same as this recent one:
  http://archives.postgresql.org/pgsql-bugs/2012-10/msg00044.php

and this behavior confused me recently as well. I agree the behavior
should be documented, though it should be documented for all our
utilities which accept a --table argument and pass it on as a
supposedly already-escaped identifier.

Incidentally, I'm really not fond of the existing behavior because it:
 a.) is counterintuitive
 b.) requires the user to escape table names themselves, and how were
they even supposed to have a chance of programmatically doing this
properly before we exposed PQescapeIdentifier()
 c.) opens possible SQL injection holes, e.g.
  reindexdb --table='foo; ALTER ROLE limited WITH superuser'

Josh


Re: pg_dump -t '"Table"' for cmd.exe

От
Bruce Momjian
Дата:
On Tue, Nov 13, 2012 at 02:45:05PM +1300, Mike Toews wrote:
> I'm not sure if this is worth documenting, but pg_dumping mixed-case tables
> with the '-t table' option appears to not be accurately documented for cmd.exe.
> Here are my four attempts, with only the last as success:
>
> Intuitive (supplying "My Table" like "My Database"), but not correct:
> C:\>"C:\Program Files\PostgreSQL\9.1\bin\pg_dump.exe" -U postgres -t "My Table"
> "My Database"
> pg_dump: No matching tables were found
>
> As documented in last example at http://www.postgresql.org/docs/9.1/static/
> app-pgdump.html
> C:\>"C:\Program Files\PostgreSQL\9.1\bin\pg_dump.exe" -U postgres -t '"My
> Table"' "My Database"
> pg_dump: No matching tables were found
>
> Escaping quotes, but using single quotes:
> C:\>"C:\Program Files\PostgreSQL\9.1\bin\pg_dump.exe" -U postgres -t '\"My
> Table\"' "My Database"
> pg_dump: too many command-line arguments (first is "My Database")
>
> Escaping quotes, but using double quotes:
> C:\>"C:\Program Files\PostgreSQL\9.1\bin\pg_dump.exe" -U postgres -t "\"My
> Table\"" "My Database"
>
> works!

Good point.  Docs updated with attached patch, and patched to 9.3 beta
as well.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +

Вложения