我有一个PostgreSQL函数,它返回一个blob值或NULL
:gettile(z,x,y)
。我想将结果存储在单个SQL语句中具有列tiles
的表z int, x int, y int, data blob
中。
tiles
表需要根据结果进行更新:
z,x,y
组合,请INSERT
换一个新行。UPDATE
值gettile()
返回NULL
,DELETE
行,或者如果不存在则默默地忽略。前两个可以用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;