我需要在Postgres9.4中执行以下交易:
BEGIN TRANSACTION;
TRUNCATE TestTable;
COPY TestTable FROM '/DATAforTestTable' DELIMITER ',' CSV;
END TRANSACTION;
用户在执行事务时必须具有对测试表中“旧”数据的读取权限,而无需等待事务结束。有可能吗?或者我必须通过复制和重命名表来完成?
最佳答案
从manual开始:
TRUNCATE在其操作的每个表上获取一个访问独占锁,这将阻塞该表上的所有其他并发操作。
使用delete
begin;
delete from t;