是否有可能(在Postgres中)做以下2个INSERT
s,或者在逻辑上等效的东西(提议的INSERT
s不像它们那样工作,但也许它们可以稍微修改?):
CREATE TABLE IF NOT EXISTS table01(
userid int8 NOT NULL,
save date NOT NULL,
followers int4
);
CREATE UNIQUE INDEX ON table01 (userid,save);
INSERT
0:
INSERT INTO table01 (userid,save,followers) VALUES (%s,%s,%s)
ON CONFLICT (userid) DO INSERT INTO table01 (userid,save,followers) VALUES (%s,%s,%s)
WHERE table01.save!=save;
INSERT
1:
INSERT INTO table01 (userid,save,followers) VALUES (%s,%s,%s) WHERE table01.save!=save;
逻辑是:
- 尝试插入一行
- 如果
userid
有冲突,那么无论如何插入行,除非日期(save
)是相同的
简介:
- 显示的2
INSERT
s(或类似的东西)可能吗? - 有可能做
ON CONFLICT DO INSERT
(就像一个做ON CONFLICT DO UPDATE
)? - 是否有可能做
INSERT INTO WHERE
(就像一个做SELECT FROM WHERE
)?
一个简单的insert
似乎可以做到你想要的:
INSERT INTO table01 (userid, save, followers)
VALUES (%s, %s, %s);
这将插入一个新行,除非userid
/save
对已经存在。在这种情况下,它将生成一个错误。如果不希望出现错误,可以使用on conflict do nothing
:
INSERT INTO table01 (userid, save, followers)
VALUES (%s, %s, %s)
ON CONFLICT (userid, save) DO NOTHING;