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