我可以将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。