在Citus中,如何在COPY期间锁定分布式表格?

时间:2016-05-23 13:11:45

标签: postgresql citus

Citus不支持数据修改命令的多语句事务,因此无法使用<head> <style> .container { to; left: 0; top: 0; bottom: 0; right: 0; } </style> </head> <body> <div class='container'> <h2></h2> </div> </body> </html> 命令阻止数据迁移期间的并发访问。

在初始数据迁移期间,有没有办法锁定对表的访问?

1 个答案:

答案 0 :(得分:1)

虽然Citus确实阻止了包含修改的多语句事务,但此检查显然不适用于新的COPY支持。因此,如果您实际上正在执行COPY而非INSERTUPDATEDELETE,则可以使用BEGINLOCK来获取你想要的单写语义:

BEGIN;
LOCK target_table IN ACCESS EXCLUSIVE MODE;

COPY target_table FROM '/file/on/server';
\copy target_table from '~/local/file'

COMMIT;

如果并发会话针对此表尝试INSERTUPDATEDELETE,则会阻塞,直到上述事务块提交为止。