Свойства, разрешенные в ограничениях ликвидной базы

#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. Документацию по нему можно найти здесь.