Liquibase на Postgresql вообще не создает функции / процедуры;Он корректно регистрирует в базе данных changelog текущий набор изменений как «выполненный», но функция не существует.
Я ищу, чтобы создать, а затем вызвать процедуру для поддержки обязательного внешнего ключа для нового поля со значением NULL;
Это мой включенный xml-файл с выделенным набором изменений:
<changeSet id="20190930_update_relation_001" author="bernardo">
<sqlFile path="../script/20190930_update_script.sql" splitStatements="true"
stripComments="true" dbms="PostgreSQL" encoding="utf8" relativeToChangelogFile="true" />
</changeSet>
<changeSet id="20190930_update_relation_002" author="bernardo">
<sql dbms="PostgreSQL" splitStatements="true" stripComments="true">
SELECT update_relation();
</sql>
</changeSet>
, и это мой код plpgsql для:
CREATE OR REPLACE FUNCTION public.update_relation()
RETURNS void
LANGUAGE 'plpgsql>'
AS $BODY$
declare
prCrs [...]%rowtype;
ngCrs [...]%rowtype;
begin
for prCrs in select [...] loop
with row as (insert [...] RETURNING * )
update [...] where id = prCrs.id; --CURRENT OF prCrs;
end loop;
for ngCrs in select [...] loop
with row as (insert [...] RETURNING * )
update [...] where id = prCrs.id; --CURRENT OF ngCrs;
end loop;
end;$BODY$;
Это просто. Liquibase правильно регистрирует в таблице базы данных журнала изменений, но на самом деле функция не существует.
ПОЧЕМУ?
РЕДАКТИРОВАТЬ
даже тег -ext: createFunction- не работает;Я только что попробовал:
<changeSet id="20190930_update_indirizzo_relation_001" author="bernardo">
<ext:createFunction dbms="PostgreSQL"
encoding="utf8"
relativeToChangelogFile="true"
replaceIfExists="true"
path="../script/20190930_update_indirizzo_script.sql"
functionName="update_relation" />
<!--<sqlFile path="../script/20190930_update_indirizzo_script.sql" splitStatements="false"-->
<!--stripComments="false" dbms="PostgreSQL" encoding="utf8" relativeToChangelogFile="true" />-->
</changeSet>
Нет журнала ошибок, нет функции ... SOB! : - (