Re: Psql command-line completion bug
От | Bruce Momjian |
---|---|
Тема | Re: Psql command-line completion bug |
Дата | |
Msg-id | 200803061728.m26HSEo25448@momjian.us обсуждение исходный текст |
Ответ на | Psql command-line completion bug (Gregory Stark <stark@enterprisedb.com>) |
Список | 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@momjian.us> http://momjian.us EnterpriseDB http://postgres.enterprisedb.com + If your life is a hard drive, Christ can be your backup. +
В списке pgsql-hackers по дате отправления: