我有一张桌子,看起来像这样:
CREATE TABLE IF NOT EXISTS list (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tok TEXT,
sid TEXT NOT NULL,
aid TEXT,
hash TEXT,
qtt SMALLINT,
p DECIMAL,
UNIQUE (tok, sid, aid),
UNIQUE (sid, qtt, hash)
);
我想用node-pg创建一个动态插入函数,其查询大致如下所示:
INSERT (tok, sid, aid, qtt, hash, p)
VALUES ($1, $2, $3, $4, $5, $6)
ON CONFLICT (tok, sid, aid, qtt, hash)
DO UPDATE SET p = $6;
当我try 插入值(NULL, string, NULL, int, string, decimal)
(与某个组合键匹配的值)时,会抛出以下错误:
错误:没有与ON冲突规范匹配的唯一或排除约束.
这与node-pg关系不大,但看起来我是如何创建INSERT
查询本身的.我的意图是使用单个upsert查询来处理这两种"UNIQUE
类型"的列表项.在冲突的情况下,没有其他关于组合唯一的问题给出了关于如何使用具有重叠列的组合键的确切答案.
假设只有与其中一个唯一键匹配的行,我应该如何处理INSERT或约束才能使其正常工作?有没有办法也让它保持一个动态的单一查询解决方案?