【问题标题】:If a row does not exists insert else don't insert in postgres如果一行不存在插入,否则不要在 postgres 中插入
【发布时间】:2013-02-18 17:19:35
【问题描述】:

我需要检查一行是否存在。如果不存在,则应插入。

这是在 postgres 中,我正在尝试通过 shell 脚本插入行。当我运行脚本时,它不会显示错误,但即使不存在匹配的行,它也不会插入到表中。

【问题讨论】:

  • 请发布您正在使用的脚本和您正在使用的语句来测试是否“没有匹配的行”。
  • 如果你可以使用 Ruby 作为你的脚本语言,你可以试试Upsert
  • 不高兴(不要与 upsert 混淆)你们中的许多人都忽略了 insert-if-not-exists 之间的区别(由这个问题提出)和 upsert (由错误标记的重复问题提出)。
  • 这不是链接问题的重复;它的答案在这里并不完全适用。它可能与a different question 重复。

标签: sql postgresql


【解决方案1】:

我喜欢他们提到的解决方案here

INSERT INTO table (id, field, field2)
       SELECT 3, 'C', 'Z'
       WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);

【讨论】:

  • 我试过这个解决方案,但它不能像低版本一样工作。因此,我想将它们分成两个不同的查询。
  • Postgres 现在还有一个 Upsert 命令,您可以在其中插入或更新一行:wiki.postgresql.org/wiki/UPSERT
  • 9.5+,INSERT ... ON CONFLICT DO NOTHINGINSERT ... ON CONFLICT UPDATE stackoverflow.com/a/17267423/1386245
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多