我试图找出一个可以执行幂等插入的查询,但是当重复插入不包含相同信息时会引发错误。
例如,给定一个现有表:
| name | email |
|--------|----------------------|
| joseph | joseph@somewhere.com |
| frank | frank@somewhere.com |
email
有一个UNIQUE
约束的地方。
插入('joseph,'joseph@somewhere.com')
应该什么都不做(我已经实现了),
但是插入('francis','frank@somewhere.com')
会因唯一约束违规而引起错误,因为“名称”值是新的。
是否可以在单个查询中执行此操作?
完整示例:
CREATE TABLE "users" (
id serial PRIMARY KEY,created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),email VARCHAR UNIQUE,name VARCHAR
);
INSERT INTO "users" (name,email) VALUES
('joseph','joseph@somewhere.com'),('frank','frank@somewhere.com');
INSERT INTO "users" (name,-- Same values,should do nothing
('frankie','frank@somewhere.com') -- New "name" value,should raise error
ON CONFLICT (email)
DO NOTHING
此SQL将成功运行-here is a fiddle-但我希望它从第二组值中引发错误。
这是与this one类似的问题,但是我无法获得解决方案来引发错误。