Re: Psql command-line completion bug

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Gregory Stark <stark(at)enterprisedb(dot)com>
Cc: pgsql-hackers list <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Psql command-line completion bug
Date: 2008-03-06 17:28:14
Message-ID: 200803061728.m26HSEo25448@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Added to TODO:

o Prevent escape string warnings when object names have
backslashes

http://archives.postgresql.org/pgsql-hackers/2008-01/msg00227.php

---------------------------------------------------------------------------

Gregory Stark wrote:
>
> If you hit tab on a table name containing a \ you get spammed with a series of
> WARNINGS and HINTS about nonstandard use of \\ in a string literal:
>
> postgres=# select * from bar\baz<<TAB>>
>
> WARNING: nonstandard use of \\ in a string literal
> LINE 1: ... substring(pg_catalog.quote_ident(c.relname),1,7)='bar\\baz'...
> ^
> HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
> WARNING: nonstandard use of \\ in a string literal
> LINE 3: ...ing(pg_catalog.quote_ident(n.nspname) || '.',1,7)='bar\\baz'...
> ^
> HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
> WARNING: nonstandard use of \\ in a string literal
> LINE 3: ...alog.quote_ident(nspname) || '.',1,7) = substring('bar\\baz'...
> ^
> HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
> WARNING: nonstandard use of \\ in a string literal
> LINE 5: ... || '.' || pg_catalog.quote_ident(c.relname),1,7)='bar\\baz'...
> ^
> HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
> WARNING: nonstandard use of \\ in a string literal
> LINE 5: ...og.quote_ident(n.nspname) || '.',1,7) = substring('bar\\baz'...
> ^
> HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
> WARNING: nonstandard use of \\ in a string literal
> LINE 5: ...alog.quote_ident(nspname) || '.',1,7) = substring('bar\\baz'...
> ^
> HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
>
>
> There are a few options here:
>
> 1) Use E'' in all the psql completion queries. This means they won't work on
> older versions of postgres (but they don't in general do so anyways). It would
> also break anybody who set standard_conforming_string = 'on'. Ideally we would
> want to use E'' and then pass false directly to PQEscapeStringInternal but
> that's a static function.
>
> 2) Use $$%s$$ style quoting. Then we don't need to escape the strings at all.
> We would probably have to move all the quoting outside the C strings and
> borrow the function from pg_dump to generate the quoting as part of sprintf
> parameter substitution.
>
> 3) set standards_conforming_strings=on for psql tab-completion queries and
> then reset it afterwards. That way we can just use plain standard-conforming
> '' and not get any warnings.
>
> 4) Replace PQExec with PQExecParam in tab-complete.c
>
> Personally I think (4) is the best long-term option but at this point that
> doesn't seem feasible. (3) or (2) seems the next best option.
>
> --
> Gregory Stark
> EnterpriseDB http://www.enterprisedb.com
> Ask me about EnterpriseDB's On-Demand Production Tuning
>
> ---------------------------(end of broadcast)---------------------------
> TIP 7: You can help support the PostgreSQL project by donating at
>
> http://www.postgresql.org/about/donate

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://postgres.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2008-03-06 18:00:25 Re: 8.3.0 Core with concurrent vacuum fulls
Previous Message Teodor Sigaev 2008-03-06 17:21:46 Re: Behaviour of to_tsquery(stopwords only)