簡體   English   中英

postgres:在插入之前刪除需要鎖定?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM