我需要在Postgres9.4中执行以下交易:

BEGIN TRANSACTION;
    TRUNCATE TestTable;
    COPY TestTable FROM '/DATAforTestTable' DELIMITER ',' CSV;
END TRANSACTION;

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

最佳答案

manual开始:
TRUNCATE在其操作的每个表上获取一个访问独占锁,这将阻塞该表上的所有其他并发操作。
使用delete

begin;
delete from t;

10-04 10:42