Michael Fuhr wrote:
> psql's \copy (query) with a delimiter yields a syntax error:
>
> test=> \copy foo to foo.txt delimiter '|'
> (works)
>
> test=> \copy (select * from foo) to foo.txt
> (works)
>
> test=> \copy (select * from foo) to foo.txt delimiter '|'
> ERROR: syntax error at or near "USING"
> LINE 1: COPY ( select * from foo ) TO STDOUT USING DELIMITERS '|'
>
> The problem is that \copy sends USING DELIMITERS for backward
> compatibility (comment on line 502 of src/bin/psql/copy.c) but that
> COPY (query) doesn't support USING DELIMITERS:
>
> CopyStmt: COPY opt_binary qualified_name opt_column_list opt_oids
> copy_from copy_file_name copy_delimiter opt_with
> copy_opt_list
> ...
> | COPY select_with_parens TO copy_file_name opt_with
> copy_opt_list
>
> copy_delimiter:
> /* USING DELIMITERS kept for backward compatibility.
> 2002-06-15 */
> opt_using DELIMITERS Sconst
>
> What should be fixed -- COPY or \copy? Does psql's \copy still
> need backward compatibility to unsupported pre-7.3?
>
I'd say fix psql. Not sure how far back we should backpatch it. It's
interesting that this has been there since 8.0 and is only now discovered.
cheers
andrew