Обсуждение: BUG #4927: psql does "spoil" the query before sending it to server

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

BUG #4927: psql does "spoil" the query before sending it to server

От
"handling numeric literals with dots in psql \copy command"
Дата:
The following bug has been logged online:

Bug reference:      4927
Logged by:          handling numeric literals with dots in psql \copy
command
Email address:      filip.rembialkowski@gmail.com
PostgreSQL version: 8.4.0
Operating system:   Linux
Description:        psql does "spoil" the query before sending it to server
Details:

8.4.0:

filip@filip=# \copy ( select 1.23::numeric as num ) to 'out.csv' with csv
header
ERROR:  syntax error at or near "."
LINE 1: COPY ( select 1 . 23::numeric as num ) TO STDOUT CSV HEADER
                        ^
\copy: ERROR:  syntax error at or near "."
LINE 1: COPY ( select 1 . 23::numeric as num ) TO STDOUT CSV HEADER
                        ^

query inside parentheses is OK.

same bug reproduced in 8.3.7

Re: BUG #4927: psql does "spoil" the query before sending it to server

От
Euler Taveira de Oliveira
Дата:
handling numeric literals with dots in psql copy command escreveu:
> filip@filip=# \copy ( select 1.23::numeric as num ) to 'out.csv' with csv
> header
> ERROR:  syntax error at or near "."
> LINE 1: COPY ( select 1 . 23::numeric as num ) TO STDOUT CSV HEADER
>                         ^
> \copy: ERROR:  syntax error at or near "."
> LINE 1: COPY ( select 1 . 23::numeric as num ) TO STDOUT CSV HEADER
>                         ^
>
> query inside parentheses is OK.
>
> same bug reproduced in 8.3.7
>
Thanks for your report.

Why are we analysing the query there? One possible fix is to remove the '.' as
delimiter in strtokx(). The trivial patch is attached.


--
  Euler Taveira de Oliveira
  http://www.timbira.com/
Index: copy.c
===================================================================
RCS file: /a/pgsql/dev/anoncvs/pgsql/src/bin/psql/copy.c,v
retrieving revision 1.80
diff -c -r1.80 copy.c
*** copy.c    26 Apr 2009 15:31:50 -0000    1.80
--- copy.c    17 Jul 2009 19:41:58 -0000
***************
*** 146,152 ****

          while (parens > 0)
          {
!             token = strtokx(NULL, whitespace, ".,()", "\"'",
                              nonstd_backslash, true, false, pset.encoding);
              if (!token)
                  goto error;
--- 146,152 ----

          while (parens > 0)
          {
!             token = strtokx(NULL, whitespace, ",()", "\"'",
                              nonstd_backslash, true, false, pset.encoding);
              if (!token)
                  goto error;

Re: BUG #4927: psql does "spoil" the query before sending it to server

От
Tom Lane
Дата:
Euler Taveira de Oliveira <euler@timbira.com> writes:
> Why are we analysing the query there? One possible fix is to remove the '.' as
> delimiter in strtokx(). The trivial patch is attached.

Surely that would break a lot of other cases.

            regards, tom lane

Re: BUG #4927: psql does "spoil" the query before sending it to server

От
Euler Taveira de Oliveira
Дата:
Tom Lane escreveu:
> Euler Taveira de Oliveira <euler@timbira.com> writes:
>> Why are we analysing the query there? One possible fix is to remove the '.' as
>> delimiter in strtokx(). The trivial patch is attached.
>
> Surely that would break a lot of other cases.
>
Why? Even if it can't catch all cases when we remove the '.', the query will
be parsed (again) by PostgreSQL.


--
  Euler Taveira de Oliveira
  http://www.timbira.com/