Postgres:在一个事务中进行 TRUNCATE 和 COPY

Dim*_*maf 3 postgresql transactions truncate copy

我需要在 Postgres 9.4 中执行以下事务:

BEGIN TRANSACTION;
    TRUNCATE TestTable;
    COPY TestTable FROM '/DATAforTestTable' DELIMITER ',' CSV;
END TRANSACTION;
Run Code Online (Sandbox Code Playgroud)

用户必须在执行事务时对 TestTable 中的“旧”数据具有读取权限,而无需等待事务结束。是否可以?或者我必须通过处理和重命名表来完成?

Clo*_*eto 5

手册

TRUNCATE 在它操作的每个表上获取一个 ACCESS EXCLUSIVE 锁,这会阻止该表上的所有其他并发操作。

delete

begin;
delete from t;
Run Code Online (Sandbox Code Playgroud)