:: Не фоксом единым
изменить PodtgreSql скрипт
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Есть набор скриптов. Если вставить их в DBeaver - выполняются. Если сделать миграции из Core проекта - тоже. Но, надо сделать миграции под NetFramework под мигратор DbUp. Простенькие скрипты, вроде create table или insert проблем не вызывают, всё работает. Но, есть хранимки. А в них есть $body$ или $function$. А, как выяснилось, в DbUp есть переменные, которые выглядят как $что_то$ dbup.readthedocs.io Первое что сделал - заменил всё на кавычки. Было:

Цитата:
CREATE OR REPLACE FUNCTION public.translatejson(JSONB, TEXT)
RETURNS TEXT
AS
$BODY$
SELECT ($1->$2)::TEXT
$BODY$
LANGUAGE sql STABLE;

стало:

Цитата:
CREATE OR REPLACE FUNCTION public.translatejson(JSONB, TEXT)
RETURNS TEXT
AS '
SELECT ($1->$2)::TEXT
'
LANGUAGE sql STABLE;

Часть скриптов заработала. В скриптах, в которых встречались кавычки пришлось кавычки удвоить. Но, некоторые хранимки большие. Выскочило сообщение


Message: 42601: unterminated quoted string at or near

Типа, строка ему длинная. На stackoverflow.com говорят, надо типа так:

Цитата:
CREATE OR REPLACE FUNCTION test(text)
RETURNS void AS ' DECLARE tmp text; \
BEGIN
tmp := ''test''; \
END;' LANGUAGE plpgsql;

Добавил обратные слеши - он их воспринимает как часть текста...

Мысли кончились. В какую сторону копать? Как заставить скрипт работать?



Исправлено 1 раз(а). Последнее : S-type, 08.07.20 23:30
Ratings: 0 negative/0 positive
Re: изменить PodtgreSql скрипт
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
На сколько понимаю, проблема "совпадения" переменных описана в github.com Но, готового решения не приведено.
Сообщение от 17-го года. И, готового решения, на сколько понимаю - нет.



Исправлено 1 раз(а). Последнее : S-type, 09.07.20 00:24
Ratings: 0 negative/0 positive
Re: изменить PodtgreSql скрипт
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
Unterminated quoted string это значит, что кавычки непарные. Обсчитались где-то.
Ratings: 0 negative/0 positive
Re: изменить PodtgreSql скрипт
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Добавил

.WithVariable("function", "$function$")

Т.е. менять переменную function на function. Заработало почти всё, кроме одного самого большого скрипта. С ним всё равно проблема.
Ratings: 0 negative/0 positive
Re: изменить PodtgreSql скрипт
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
pasha_usue
Unterminated quoted string это значит, что кавычки непарные. Обсчитались где-то.

Нет. С кавычками там норма. DBraver отрабатывает скрипт нормально. Проблема в очень длинной строке. Он строку обрезает, и кричит "не кавычки". Конечно, её нет - он же её обрезал. Вот как сделать text - не понятно.
Ratings: 0 negative/0 positive
Re: изменить PodtgreSql скрипт
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
Возможно поможет.
SELECT E'ab \' c \r\n def'
Ratings: 0 negative/0 positive
Re: изменить PodtgreSql скрипт
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Разобрался с последним скриптом. Он падал из за того, что ; была в отдельной строке. Почему то DbUp на этом месте обрывал текст скрипта. Как только это убрал (передвинул ; к последнему оператору) - всё заработало.



Исправлено 1 раз(а). Последнее : S-type, 09.07.20 13:55
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 4 (Гостей: 4)

© 2000-2024 Fox Club 
Яндекс.Метрика