如何在postgres中为多对多关系创建liquibase迁移

问题描述

我必须在postgresql中的表之间创建多对多关系。 我正在使用liquibase初始化数据库架构

我需要两个表:

create table t1 (
  id UUID primary key
)

create table t2 (
  id UUID primary key
)

和用于链接它们的联接表

create table t1_t2 (
  t1_id UUID,t2_id UUID
)

这是我的迁移文件

    <changeSet id="1" author="me">
        <createTable tableName="t1">
            <column name="id" type="UUID">
                <constraints primaryKey="true"/>
            </column>
        </createTable>
        <createTable tableName="t2">
            <column name="id" type="UUID">
                <constraints primaryKey="true"/>
            </column>
        </createTable>
        <createTable tableName="t1_t2">
            <column name="t1_id" type="UUID">
                <constraints nullable="false"/>
            </column>
            <column name="t2_id" type="UUID">
                <constraints nullable="false"/>
            </column>
        </createTable>
        <addPrimaryKey tableName="t1_t2" columnNames="t1_id,t2_id"/>
        <addForeignKeyConstraint baseTableName="t1_t2" baseColumnNames="t1_id"
                                 constraintName="fk_t1_t2_t1_id"
                                 referencedTableName="t1" referencedColumnNames="id"/>
        <addForeignKeyConstraint baseTableName="t1_t2" baseColumnNames="t2_id"
                                 constraintName="fk_t1_t2_t2_id"
                                 referencedTableName="t2" referencedColumnNames="id"/>
    </changeSet>

当我在H2数据库中运行此迁移时,效果很好,但是postgresql抛出错误

错误:没有与引用表“ t1”的给定键匹配的唯一约束

但是此字段上不应存在唯一约束,因为它是具有复合主键的联接表,因此t1_idt2_id字段不是唯一的。

是否可以在postgres中为联接表创建外键?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)