powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / dollar-quoted strings, функции и др. непонятки
4 сообщений из 4, страница 1 из 1
dollar-quoted strings, функции и др. непонятки
    #34285549
мнк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот объясните плиз тупому ламеру, почему на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE FUNCTION tmp_f(in_arg text) RETURNS text AS
$$
  DECLARE a1 text;
  BEGIN
     a1 := substring(in_arg from '(\\d+)-.+');
     RETURN in_arg || 'and ' || a1;
  END;
$$ 
LANGUAGE 'plpgsql';

постгрес ругается
psql
ERROR: unterminated dollar-quoted string at or near "$$
DECLARE a1 text;" at character 63


Даже если пример из документации скопировать и вставить в psql - та же фигня.
Если написать .. AS '<тело функции>' ..., то все нормально, но экранирование кавычек внутри функции превращает все в офигеннейшую кашу...

2. Как-нибудь можно сказать постгресу, чтобы он не предупреждал
psql
WARNING: nonstandard use of escape in a string literal
HINT: Use the escape string syntax for escapes, e.g., E'\r\n'.
CONTEXT: SQL statement in PL/PgSQL function "tmp_f" near line 3

и вообще, к чему это предупреждение (на \\d в регулярке)?? Ведь я написал так, как в доках на 8.2 было, даже пример там с такой штукой ( regexp_replace('foobarbaz', 'b(..)', 'X\\1Y', 'g') ).

И, похоже, что из-за этих предупреждений и функция не работает.
Если сделать SELECT tmp_f('0123-abcd'), то ничего не вернется, а если SELECT substring('0123-abcd' from '(\\d+)-.+') - то все нормально...
Ничччего не понимаю......

PS. Postgres - 8.2
...
Рейтинг: 0 / 0
dollar-quoted strings, функции и др. непонятки
    #34286342
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Футкция буквально скопированная с вашего поста(copy+past) прекрасно создаеться и работает. Правда у меня 8.1. Но, думаю, не в этом дело. Может вы ее из файла создаете, в котором помимо этой функции еще что-то есть?
.....
А вообще глянте вот тут
У вас случаем psql не от 7.x?
...
Рейтинг: 0 / 0
dollar-quoted strings, функции и др. непонятки
    #34286454
мнк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О, спасибо за наводку!
Действительно, запускался psql от 7.1, оказывается от 8-ки пути не были прописаны в шелле для другого пользователя, а я обычно пользовался другим аккаунтом, где пути были в порядке.

Две трети проблем решились.
Но постгрес продолжает предупреждать
psql
WARNING: nonstandard use of \\ in a string literal at character 29
HINT: Use the escape string syntax for backslashes, e.g., E'\\'.
QUERY: SELECT substring( $1 from '(\\d+)-.+')

Ну какой же это nonstandard use, если все поголовно этим пользуются.
Неужели придется везде писать
'bla-bla-bla' || E'\'' || 'bla-bla'
вместо простого
'bla-bla-bla\'bla-bla'
чтобы предупреждения не сыпались?
...
Рейтинг: 0 / 0
dollar-quoted strings, функции и др. непонятки
    #34286681
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эээээ.... На сколько я помню, у них какая-то толи дырка, то ли бага была с эскейппоследовательностями, и в 8.2 что-то на этот щет сильно поменялось. Так что изучайте документацию именно по 8.2

E.2.2. Migration to version 8.2

Observe the following incompatibilities:
Set escape_string_warning to on by default (Bruce)
This issues a warning if backslash escapes are used in non-escape (non-E'') strings.


escape_string_warning (boolean)

When on, a warning is issued if a backslash (\) appears in an ordinary string literal ('...' syntax) and standard_conforming_strings is off. The default is on.
Applications that wish to use backslash as escape should be modified to use escape string syntax (E'...'), because the default behavior of ordinary strings will change in a future release for SQL compatibility. This variable can be enabled to help detect applications that will break.

http://www.postgresql.org/docs/8.2/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS

По ходу можете просто дерективу отключить в конфиге, или переходить именно на E формат (что и рекомендуеться!). Или просто забить на варнинги - работает же и с ними! :-)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / dollar-quoted strings, функции и др. непонятки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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