我有一个表格的形式(基于):
create table foo (
name text unique,
ref_id int,
mod_time timestamptz
);
我希望能够插入其中,但是如果正在使用(mod_time
,name
)对,则更新ref_id
,如果另一个name
使用了ref_id
,则更新失败。
我可以通过如下创建另一个唯一约束来做到这一点:
alter table foo add unique (name, ref_id);
然后
insert into foo values ( $1, $2, $3 ) on conflict (name, ref_id) do update set mod_time = excluded.mod_time;
将根据需要运行:
但是,成本是第二唯一索引,实际上对于执行约束来说是多余的,因为name
唯一的记录将自动由name
和ref_id
唯一。是否有一些解决方法可以让我在没有第二个索引的情况下,也没有到数据库的其他往返操作获得此行为?
我有一个表格(基于)的表:create table foo(名称文本唯一,ref_id int,mod_time timestamptz);我希望能够插入其中,但是如果(...
这取决于您的失败意思。如果在这种情况下不执行任何操作也可以:where If same name for different ref_id
,则可以执行以下操作: