postgres 14
我有一些表:
CREATE TABLE sometable (
id integer NOT NULL PRIMARY KEY UNIQUE ,
a integer NOT NULL DEFAULT 1,
b varchar(32) UNIQUE)
PARTITION BY RANGE (id);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试执行它时,我得到了
ERROR: unique constraint on partitioned table must include all partitioning columns
Run Code Online (Sandbox Code Playgroud)
如果我执行相同的表定义而不PARTITION BY RANGE (id)检查索引,我得到:
tablename indexname indexdef
sometable, sometable_b_key, CREATE UNIQUE INDEX sometable_b_key ON public.sometable USING btree (b)
sometable, sometable_pkey, CREATE UNIQUE INDEX sometable_pkey ON public.sometable USING btree (id)
Run Code Online (Sandbox Code Playgroud)
所以...存在独特的限制
有什么问题?我该如何修复它?
Lau*_*lbe 18
在分区表上,所有主键、唯一约束和唯一索引都必须包含分区表达式。这是因为分区表上的索引是由每个分区上的单独索引实现的,并且无法强制不同索引之间的唯一性。
如果你想使用分区,你就必须牺牲一些一致性保证。没有办法解决这个问题。您可以做的是在分区上创建唯一的约束。这将保证每个分区内的唯一性,但不能保证全局唯一性。
| 归档时间: |
|
| 查看次数: |
15158 次 |
| 最近记录: |