Re: Psql command-line completion bug

From: "Roberts, Jon" <Jon(dot)Roberts(at)asurion(dot)com>
To: pgsql-hackers list <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Psql command-line completion bug
Date: 2008-01-08 14:19:40
Message-ID: 1A6E6D554222284AB25ABE3229A927627153AA@nrtexcus702.int.asurion.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Option 5 would be to deprecate the ability to use a \ in an object name.

Jon

> -----Original Message-----
> From: Gregory Stark [mailto:stark(at)enterprisedb(dot)com]
> Sent: Tuesday, January 08, 2008 8:14 AM
> To: pgsql-hackers list
> Subject: [HACKERS] Psql command-line completion bug
>
>
> 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

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Chernow 2008-01-08 14:38:16 Proposal - libpq Type System beta-0.8a (was PGparam)
Previous Message Gregory Stark 2008-01-08 14:13:53 Psql command-line completion bug