Postgres:在一个事务中执行TRUNCATE和COPY操作

3

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

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

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


你尝试时发生了什么? - Clodoaldo Neto
我执行 select * from TestTable limit 5;,只有在结束事务或中断它后才能得到结果。 - Dimaf
1个回答

5

手册可以看到:

TRUNCATE操作对每个表都会获取ACCESS EXCLUSIVE锁,这会阻塞其他并发在该表上的操作。

使用delete替代。

begin;
delete from t;

是的。我已经尝试过使用delete,它有效。非常感谢你! - Dimaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接