PostgreSQL IF值不存在THEN INSERT值

时间:2017-12-13 12:51:59

标签: sql postgresql sql-insert

我已尝试过此代码的多种变体,并且一直给我SQL状态:42601错误。我已经查看过这些文档,并尝试使用他们的示例,这些示例有时可以正常工作,但却没有按照我的意愿行事。

IF (SELECT guildid FROM Servers <> 1) THEN
  INSERT INTO Servers (guildid) VALUES (1)
END IF;

我的服务器表很简单。我只有一行叫做guildid。我不想要CASE语句,因为它只输出消息。

2 个答案:

答案 0 :(得分:1)

如果您不必担心竞争条件(if方法建议),那么:

INSERT INTO Servers (guildid)
   SELECT guildid
   FROM (VALUES (1)) v(guildid)
   WHERE NOT EXISTS (SELECT 1 FROM Servers s WHERE s.guildid = v.guildid);

为了保护表格,我建议在其上添加一个唯一索引。实际上,只需将guildid声明为主键即可。在这种情况下,如果您尝试插入重复值,原始插入将失败。

答案 1 :(得分:0)

如果您对该列有唯一约束,则可以使用on conflict do nothing

INSERT INTO Servers (guildid) VALUES (1)
ON CONFLICT DO NOTHING;