Как использовать сгенерированный UUID из предыдущей вставки в другую следующую инструкцию вставки в столбце внешнего ключа - PullRequest
0 голосов
/ 17 мая 2019

У меня есть следующее свойство и инструкция вставки в мой набор изменений в liquibase Block1</p> <pre><code><property name="RESTRICTED_ADMIN_UUID" value="uuid_generate_v4()" dbms="postgresql"/> <property name="FULL_ACCESS_ADMIN_UUID" value="uuid_generate_v4()" dbms="postgresql"/> <property name="MANAGE_INBOX_C_UUID" value="uuid_generate_v4()" dbms="postgresql"/>

block2

<insert tableName="role">
    <column name="id" valueComputed="${RESTRICTED_ADMIN_UUID}"/>
    <column name="version" value="0"/>
    <column name="description" value="Default restricted role for mapped-free-plan users"/>
    <column name="name" value="RESTRICTED_ADMIN"/>
    <column name="status" value="ACTIVE"/>
    <column name="bp_id" value="0"/> 
</insert>
<insert tableName="role">
    <column name="id" valueComputed="${FULL_ACCESS_ADMIN_UUID}"/>
    <column name="version" value="0"/>
    <column name="description" value="Default restricted role for mapped-free-plan users"/>
    <column name="name" value="FULL_ACCESS_ADMIN"/>
    <column name="status" value="ACTIVE"/>
    <column name="bp_id" value="0"/> <!--  0 means default template object -->
</insert>

Block3

<insert tableName="permissions"> 
    <column name="id" valueComputed="${MANAGE_INBOX_C_UUID}"/> 
    <column name="version" value="0"/> <column name="description" value="Manage inbox create"/> 
    <column name="name" value="MANAGE_INBOX_C"/> 
</insert>

Block4

<insert tableName="role_permission"> 
    <column name="id" valueComputed="uuid_generate_v4()"/> 
    <column name="version" value="0"/> 
    <column name="is_all" value="FALSE"/> 
    <column name="is_create" value="TRUE"/> 
    <column name="is_delete" value="FALSE"/> 
    <column name="is_read" value="FALSE"/> 
    <column name="is_update" value="FALSE"/> 
    <column name="permission_id" valueComputed="${MANAGE_INBOX_C_UUID}"/> 
    <column name="role_id" valueComputed="${RESTRICTED_ADMIN_UUID}"/>     
</insert>

Блок 1, 2,3 работает без ошибок.

Блок 4 выдает следующую ошибку

=========================================

Причина: liquibase.exception.DatabaseException: ОШИБКА: вставка или обновление в таблице "role_permission" нарушает ограничение внешнего ключа "fk2xn8qv4vw30i04xdxrpvn3bdi" - деталь: Key (license_id) = (bfa5266c-7df1-48ca-8dae-44a4) отсутствует-44a4) в таблице "разрешения". [Сбой SQL: INSERT INTO public.role_permission (идентификатор, версия, is_all, is_create, is_delete, is_read, is_update, license_id, role_id) VALUES (uuid_generate_v4 (), '0', 'FALSE', 'TRUE', 'FALSE', 'ЛОЖЬ', 'ЛОЖЬ', uuid_generate_v4 (), uuid_generate_v4 ())]

Ожидаемый результат:

что оператор вставки в блоке 4 был бы что-то вроде

INSERT INTO public.role_permission (id, version, is_all, is_create, is_delete, is_read, is_update, permission_id, role_id)
 VALUES (uuid_generate_v4(), '0', 'FALSE', 'TRUE', 'FALSE', 'FALSE', 'FALSE', UUID-generated-in-block1-line3, UUID-generated-in-block1-line1)
...