如何解决我可以将FOREIGN KEY引用到Postgresql v13中的分区表吗?
我正在尝试在2个分区表之间添加外键,这给了我错误(没有唯一的约束匹配给定表“ user”的给定键) 我使用的是postgresql v13,pgAdmin 4.26。 分区表到普通表外键的工作原理,普通表到分区表的错误与上述相同。当我阅读v13文档时,对此没有任何限制。谁能帮我吗?
java.util.TimeZone.getTimeZone("Europe/Berlin")
解决方法
您不能对id
具有唯一约束(每个主键或唯一约束都必须包含value
),因此您也不能在外键中引用该列。
具有外键约束的唯一解决方案是将value
添加到test
并将其包括在外键定义中。
没有解决方法。
顺便说一句,您永远不应该有一个名为user
的表,因为它是保留的SQL关键字。
大概是您打算的:
CREATE TABLE users (
user_id int generated always as identity primary key,value varchar,) ;
CREATE TABLE tests (
test_id int generated always as identity,user_id integer,PRIMARY KEY (test_id,user_id)
FOREIGN KEY (user_id) REFERENCES user(user_id)
) ;
注意:
- 我删除了分区逻辑。它似乎并不是特别有用,并且会干扰您的表定义。分区键必须是主键的一部分。
- 我将主键更改为在第一张表中只有一列。
user_id
是唯一的,因此不需要复合主键。 - 我将主键的名称从
id
更改为包括表名。这样,大多数外键引用将具有与主键相同的名称。 - 我将表的名称复数。这有助于避免与SQL关键字和保留字冲突。另外,这很有意义,因为表包含多个实体。
- 我将
serial
更改为generated always as identity
。现在建议将其用于Postgres。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。