postgresql中为分区表添加主键

ash*_*hok 8 postgresql

CREATE TABLE list_parted (a int, b int) PARTITION BY LIST(a);

CREATE TABLE list_part_1 PARTITION OF list_parted FOR VALUES IN (1, 2, 3);
CREATE TABLE list_part_2 PARTITION OF list_parted FOR VALUES IN (6, 7, 8);

INSERT INTO list_parted VALUES (7, 77);

ALTER TABLE list_parted ADD PRIMARY KEY (b);
Run Code Online (Sandbox Code Playgroud)

当我尝试为上表添加主键时,出现此错误:

错误:主键约束定义中的列不足
SQL 状态 0A000
详细信息:表“list_parted”上的主键约束缺少作为分区键一部分的列“a”。

小智 19

您需要在 PK 声明中包含分区列或使用这两列创建一个 UNIQUE idx,结果相同。

CREATE TABLE customer(
  id int,
  country_code character varying(5),
  name character varying(100),
  PRIMARY KEY (id, country_code)
)
PARTITION BY LIST (country_code);
Run Code Online (Sandbox Code Playgroud)