问题描述
我必须在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_id
和t2_id
字段不是唯一的。
是否可以在postgres
中为联接表创建外键?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)