#postgresql #liquibase
Вопрос:
Я пытаюсь добавить новую таблицу в БД с помощью Liquibase.
Я накладываю ограничения внутри определения таблицы и в нем есть внешний ключ. Без дополнительного addForeignKey
фрагмента кода.
Поэтому я пытаюсь использовать это. Но там написано onDelete
, что вход воспрещен constraints
. Также немного сложно найти какую-либо документацию, связанную с этим. Однако другие свойства разрешены.
<createTable tableName="relationship_view_person">
<column name="view_id" type="BIGINT">
<constraints nullable="false" foreignKeyName="fk_view_person_reln" referencedTableName="configured_view" referencedColumnNames="view_id" onDelete="CASCADE" />
</column>
<column name="person_id" type="TEXT">
<constraints nullable="false" foreignKeyName="fk_person_view_reln" referencedTableName="persons" referencedColumnNames="person_id" onDelete="CASCADE" />
</column>
</createTable>
Я получаю эту ошибку
cvc-complex-type.3.2.2: Attribute 'onDelete' is not allowed to appear in element 'constraints'.
Ответ №1:
Пожалуйста, ознакомьтесь с этой документацией для add column
in liquibase. И прокручивайте, пока не окажетесь в Constraints tag
разделе. Вы найдете все атрибуты, разрешенные constraints
тегом liquibase.
В соответствии с ошибкой, за которую вы получаете onDelete
, не допускается, пожалуйста, попробуйте использовать атрибут deleteCascade="true"
, как показано ниже:
<createTable tableName="relationship_view_person">
<column name="view_id" type="BIGINT">
<constraints nullable="false" foreignKeyName="fk_view_person_reln" referencedTableName="configured_view" referencedColumnNames="view_id" deleteCascade="true" />
</column>
<column name="person_id" type="TEXT">
<constraints nullable="false" foreignKeyName="fk_person_view_reln" referencedTableName="persons" referencedColumnNames="person_id" deleteCascade="true" />
</column>
</createTable>
При запуске updateSQL
он сгенерирует ожидаемый SQL-запрос для вас (который вы можете проверить перед его выполнением непосредственно в БД).:
CREATE TABLE public.relationship_view_person (view_id BIGINT NOT NULL, person_id TEXT NOT NULL, CONSTRAINT fk_view_person_reln FOREIGN KEY (view_id) REFERENCES public.configured_view(view_id) ON DELETE CASCADE, CONSTRAINT fk_person_view_reln FOREIGN KEY (person_id) REFERENCES public.persons(person_id) ON DELETE CASCADE);
Примечание: onDelete
атрибут работает с addForeignKeyConstraint
тегом в liquibase. Документацию по нему можно найти здесь.