Thread: BUG #4927: psql does "spoil" the query before sending it to server
BUG #4927: psql does "spoil" the query before sending it to server
From
"handling numeric literals with dots in psql \copy command"
Date:
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
From
Euler Taveira de Oliveira
Date:
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;
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
From
Euler Taveira de Oliveira
Date:
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/