Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-hackers by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group