Option 5 would be to deprecate the ability to use a \ in an object name.
Jon > -----Original Message----- > From: Gregory Stark [mailto:[EMAIL PROTECTED] > 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 ---------------------------(end of broadcast)--------------------------- TIP 1: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly