1

Citus 不支持数据修改命令的多语句事务,因此无法LOCK在数据迁移过程中使用该命令防止并发访问。

在初始数据迁移期间,是否有任何方法可以锁定对表的访问?

4

1 回答 1

1

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

BEGIN;
LOCK target_table IN ACCESS EXCLUSIVE MODE;

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

COMMIT;

如果并发会话尝试针对此表执行INSERTUPDATEDELETE,它将阻塞,直到上述事务块提交。

于 2016-05-25T19:57:56.183 回答