Re: Psql command-line completion bug
От | Roberts, Jon |
---|---|
Тема | Re: Psql command-line completion bug |
Дата | |
Msg-id | 1A6E6D554222284AB25ABE3229A927627153AA@nrtexcus702.int.asurion.com обсуждение исходный текст |
Ответ на | Psql command-line completion bug (Gregory Stark <stark@enterprisedb.com>) |
Список | 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@enterprisedb.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 по дате отправления: