postgres 存储过程中的 UPSERT

Kam*_*šík -1 postgresql insert update upsert

Postgres 已经有一种方法可以执行“upsert”,但我不喜欢发送这些长查询,我想知道它是否可以实现为一个存储过程,它将接受 json 并执行

INSERT INTO ... (keys)
  VALUES (values)
  ON CONFLICT DO UPDATE SET (setEverythingFromExcluded)
Run Code Online (Sandbox Code Playgroud)

我知道我可以以某种方式使用json_object_keysandjson_extract_path或直接使用json_each,但我最初的尝试毫无结果,所以也许有人已经这样做了?

dez*_*zso 5

将 UPSERT 语法和功能添加到 Postgres 是有原因的。我不会详细介绍,因为它在其他地方进行了详尽的描述,但自定义 upsert 实现的大多数问题都源于并发。 INSERT ... ON CONFLICT UPDATE ...解决了这些问题,并最终为您提供了比任何其他解决方案更简洁的语法。