[英]postgres: delete before insert requires lock?
我想替換客戶的記錄列表。 似乎 postgres 沒有處理我的情況的merge
語句我決定按如下方式進行:
我像這樣刪除客戶的所有記錄
DELETE FROM SOME_TABLE WHERE SOME_TABLE.CLIENT_ID=?
然后插入一些新記錄:
INSERT INTO SOME_TABLE (CLIENT_ID, ...) VALUES (1, ...), (2, ...)
我在交易中這樣做。
我的問題:我知道需要某種形式的同步(鎖定或一定級別的事務隔離)的先讀后寫問題。
這些是其中一種情況嗎?
如果您沒有太多客戶端,則可以按client_id
對表進行分區。
然后為客戶端替換數據可能會盡可能快:
BEGIN;
TRUNCATE some_table_partition_1;
COPY some_table_partition_1 (client_id, ...) FROM STDIN
(FORMAT 'csv', FREEZE);
COMMIT;
分區將在操作期間自動鎖定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.