gpt4 book ai didi

postgresql - 表 "subscriber_historization"上的 UNIQUE 约束缺少作为分区键一部分的列 "processing_date"

转载 作者:行者123 更新时间:2023-12-03 23:50:18 28 4
gpt4 key购买 nike

我想使用约束,所以我可以使用 upsert。因为我不想在 customer_identifier_value 上重复输入。

on conflict (customer_identifier_value) do nothing

[42P10] ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification

当我创建约束
alter table subscriber_historization
add constraint customer_identifier_value_unique unique (customer_identifier_value);

[0A000] ERROR: insufficient columns in UNIQUE constraint definition
Detail: UNIQUE constraint on table "subscriber_historization" lacks column "processing_date" which is part of the partition key.

这是 DDL。
-- auto-generated definition
create table subscriber_historization
(
customer_identifier_value text not null,
product_value text,
contract_date_end date,
processing_date date not null,
constraint subscriber_historization_pk
primary key (processing_date, customer_identifier_value)
)
partition by RANGE (processing_date);

如果我使用
ON CONFLICT ON CONSTRAINT subscriber_historization_pk DO NOTHING

如果 process_date 不同,将插入该行。然后在 customer_identifier_value 上会有重复的条目。

那么如何使用upsert呢?

谢谢你的帮助。

最佳答案

您无法通过分区表阻止这种情况,因为所有唯一索引都必须包含分区键。

你唯一的出路是使用 SERIALIZABLE整个事务隔离并使用触发器验证约束。然而,这将是一个性能上的打击。

这是分区的限制。

关于postgresql - 表 "subscriber_historization"上的 UNIQUE 约束缺少作为分区键一部分的列 "processing_date",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59044522/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com