如何解决Postgresql 按列分区没有主键
我希望能够通过 worksite_uuid
对表进行分区。但是 worksite_uuid
需要可以为空,而我需要 uuid
作为主键。
我能够创建分区的唯一方法是,如果 worksite_uuid
不能像这样为空:
CREATE TABLE test (
uuid uuid DEFAULT uuid_generate_v1mc(),worksite_uuid text,notes text
)
PARTITION BY LIST(worksite_uuid)
//then add worksite_uuid and uuid as a primary key
create table test_worksite1 partition of test for values in ('1');
create table test_worksite2 partition of test for values in ('2');
有谁知道我如何创建一个只有 uuid
作为主键的分区并使 worksite_uuid
可以为空?
--
示例:我不能这样做
CREATE TABLE test (
uuid uuid DEFAULT uuid_generate_v1mc() PRIMARY KEY,notes text
)
PARTITION BY LIST(worksite_uuid)
我收到以下错误:
查询 1 错误:错误:分区表的唯一约束必须包括所有分区列 详细信息:表“test”上的 PRIMARY KEY 约束缺少作为分区键一部分的列“worksite_uuid”。
解决方法
为NULL值创建一个分区是没有问题的:
create table test_worksite_null partition of test for values in (NULL);
但是不可能有一个可以为空的主键列。你就是做不到。
我看到了两种出路:
-
你没有主键。相反,在每个单独的分区上创建主键。这不能保证全局唯一性,但几乎可以。
-
您使用另一个值而不是 NULL,例如 -1。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。