【发布时间】:2020-06-25 14:44:40
【问题描述】:
我想替换客户的记录列表。似乎 postgres 没有处理我的情况的mergestatement 我决定按如下方式进行:
我像这样删除客户的所有记录
DELETE FROM SOME_TABLE WHERE SOME_TABLE.CLIENT_ID=?
然后插入一些新记录:
INSERT INTO SOME_TABLE (CLIENT_ID, ...) VALUES (1, ...), (2, ...)
我正在交易中这样做。
我的问题:我知道需要某种形式的同步(锁定或一定级别的事务隔离)的先读后写问题。
这是其中一种情况吗?
【问题讨论】:
-
在 Postgres 中相当于 MERGE 是
insert ... on conflict (..) do update -
@a_horse_with_no_name 感谢您的回复。这不是相同的用例,因为它不会“替换”记录列表。它会留下不包含在插入语句中的记录。
-
你能给出一些粗略的数字/百分比吗?要做到这一点,必须删除多少行,更新多少行,插入多少行?运行过程中会发生什么样的并发访问?是否有单独的
client表? -
@Ynv:您仍然可以在第二步中删除它们:dbfiddle.uk/…
标签: sql postgresql concurrency locking