Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / странности pg 8.2 / 2 сообщений из 2, страница 1 из 1
02.05.2007, 16:08
    #34499989
tier.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странности pg 8.2
Приветствую, господа.
Заметил пару странностей постгреса, т.е. он ведет себя не так, как должен, судя по документации. Пока опишу только первую (вторую - в другой теме), а вы, если можно, покажите, где я неправ.
Итак, имеем постгрес 8.2.3 на линуксе.
Функция:
CREATE FUNCTION get_user_tables() RETURNS SETOF name AS
$BODY$
SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename ~ E'^urllist_\\d' ORDER BY RANDOM();
$BODY$
LANGUAGE 'sql' STABLE;

Если не экранировать регулярное выражение '^urllist_\\d' знаком E - то вылазят предупреждения:
WARNING: nonstandard use of \\ in a string literal at character 113
при каждом вызове функции.
Странно то, что они вылазят и если экранировать - но гораздо реже. Примерно - один раз на 10 вызовов функции. Как это можно объяснить? Я рационального объяснения не нахожу. Вынужден был вообще отключить вывод таких предупреждений в конфиге постгреса...
Спасибо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
10.08.2008, 09:19
    #35480061
Petr_Nikolaev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
странности pg 8.2
http://groups.google.com/group/comp.databases.postgresql/browse_thread/thread/cb7bb77ba2ebb41c

The first solution:

Edit postgresql.conf, set
standard_conforming_strings = on
and restart the server.

Then backslashes will be treated as normal characters, and if you
need them as escape character, you must preceed the string with an 'E',
as in E'string\nwith newline'.

This solution is good because this will be the default in some future
release.

The second solution:

Preceed all string literals that contain a backslash with an E as above
and replace single backslashes with double backslashes whenever they
should not be treated as escape character.

This may be a little more work.

The third solution:

Edit postgresql.conf, set
escape_string_warning = off
and restret the server.

This will get rid of the warnings; single backslashes will be treated as
escape characters.

I wouldn't recommend this because - as said - behaviour may change in
a future release.

Yours,
Laurenz Albe
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / странности pg 8.2 / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]