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 по дате отправления:

Предыдущее
От: Gregory Stark
Дата:
Сообщение: Psql command-line completion bug
Следующее
От: Andrew Chernow
Дата:
Сообщение: Proposal - libpq Type System beta-0.8a (was PGparam)