CREATE TABLE LIKE 使用不同的主键进行分区

CREATE TABLE LIKE with different primary key for partitioning

我有现有的 table 只狗,我想使用 colour 列按列表进行分区:

CREATE TABLE dogs (
  id int PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  colour text,
  name text
)
;

因为无法对现有的 table 进行分区,我将创建一个新的空分区 table 然后复制数据。

CREATE TABLE
trade_capture._customer_invoice
(
  LIKE
  trade_capture.customer_invoice
  INCLUDING ALL
)
PARTITION BY LIST (bill_month)
;

此报告:

ERROR:  insufficient columns in PRIMARY KEY constraint definition
DETAIL:  PRIMARY KEY constraint on table "_dogs" lacks column "colour" which is part of the partition key.

我知道我可以像这样忽略主键,但是 table 没有主键似乎很糟糕!

CREATE TABLE
_dogs
(
  LIKE
  dogs
  INCLUDING ALL
  EXCLUDING INDEXES
)
PARTITION BY LIST (colour)
;

什么是最好的继续进行的方法,所以我有一个分区 table,它仍然有一个主键?

将分区键添加到主键:

ALTER TABLE trade_capture._customer_invoice
   ADD PRIMARY KEY (id, bill_month);

没有其他选项可以对分区 table 进行唯一约束。