在单个PostgreSQL查询中对NULL进行UPSERT + DELETE(MERGE?)

时间:2019-04-01 03:15:22

标签: postgresql upsert

我有一个PostgreSQL函数,它返回一个blob值或NULLgettile(z,x,y)。我想将结果存储在单个SQL语句中具有列tiles的表z int, x int, y int, data blob中。

tiles表需要根据结果进行更新:

  • 如果没有这样的z,x,y组合,请INSERT换一个新行。
  • 如果有,则UPDATE
  • 如果gettile()返回NULLDELETE行,或者如果不存在则默默地忽略。

前两个可以用UPSERT完成,但是有没有一种方法可以简化所有3个操作?

理想情况下,需要修改此查询以支持DELETE方案:

WITH vals (z,x,y) AS (VALUES (0,0,0), (1,0,0), (1,1,0))
INSERT INTO tiles (z,x,y,data)
SELECT z, x, y, gettile(z,x,y) AS data FROM vals
ON CONFLICT (z,x,y) DO UPDATE
    SET data = excluded.data;

0 个答案:

没有答案
相关问题