Обсуждение: Documentation problem: The syntax for "\copy" is just wrong

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

Documentation problem: The syntax for "\copy" is just wrong

От
David Tonhofer
Дата:
At


http://www.postgresql.org/docs/9.3/static/app-psql.html#APP-PSQL-META-COMMANDS-COPY

the syntax for the \copy command is given as follows:

   \copy { table [ ( column_list ) ] | ( query ) } { from | to } {
'filename' | program 'command' | stdin | stdout | pstdin | pstdout } [ [
with ] ( option [, ...] ) ]

In particular, we read:

  "The syntax of the command is similar to that of the SQL COPY command,
and option must indicate one of the options of the SQL COPY command."


Well, it turns out that NOPE, THIS AIN'T TRUE.

According to the description as given, the following should work.

   \copy table_to_fill from 'foofile.csv' with format csv, header true,
delimiter ',';


In particular, options are separated by "," and options use the same
syntax as for COPY, which according to
http://www.postgresql.org/docs/9.3/static/sql-copy.html is:


FORMAT format_name
OIDS [ boolean ]
FREEZE [ boolean ]
DELIMITER 'delimiter_character'
NULL 'null_string'
HEADER [ boolean ]
QUOTE 'quote_character'
ESCAPE 'escape_character'
FORCE_QUOTE { ( column_name [, ...] ) | * }
FORCE_NOT_NULL ( column_name [, ...] )
ENCODING 'encoding_name'


Experiments however show \copy expects something else (the option's
values basically?), a not separated by commas:

   \copy table_to_fill from 'foofile.csv' with csv header delimiter ',';



Regards,

-- David

Re: Documentation problem: The syntax for "\copy" is just wrong

От
Tom Lane
Дата:
David Tonhofer <bughunt@gluino.name> writes:
> the syntax for the \copy command is given as follows:

>    \copy { table [ ( column_list ) ] | ( query ) } { from | to } {
> 'filename' | program 'command' | stdin | stdout | pstdin | pstdout } [ [
> with ] ( option [, ...] ) ]

Yeah ...

> According to the description as given, the following should work.
>    \copy table_to_fill from 'foofile.csv' with format csv, header true,
> delimiter ',';

Not sure how you get from the first to the second.  The syntax clearly
shows parens around the option list as required.

            regards, tom lane

Re: Documentation problem: The syntax for "\copy" is just wrong

От
Pedro Gimeno
Дата:
David Tonhofer wrote, On 2014-07-14 20:50:
> At
>
>
> http://www.postgresql.org/docs/9.3/static/app-psql.html#APP-PSQL-META-COMMANDS-COPY
>
> the syntax for the \copy command is given as follows:
>
>    \copy { table [ ( column_list ) ] | ( query ) } { from | to } {
> 'filename' | program 'command' | stdin | stdout | pstdin | pstdout } [ [
> with ] ( option [, ...] ) ]
>
> [...]
>
> According to the description as given, the following should work.
>
>    \copy table_to_fill from 'foofile.csv' with format csv, header true,
> delimiter ',';

This seems to be frequently reported. Can the parentheses be made more
prominent, e.g. by boldfacing them or putting them in quotes? They are
fairly easy to miss, because of the metacharacters [ ] { } interspersed
and the use of different conventions in different grammar specifications.

Alternatively, perhaps mention the parentheses explicitly in the text?

To the OP, this should work:

  \copy table_to_fill from 'foofile.csv' with (format csv, header true,
delimiter ',');