Citus 不支持数据修改命令的多语句事务,因此无法LOCK
在数据迁移过程中使用该命令防止并发访问。
在初始数据迁移期间,是否有任何方法可以锁定对表的访问?
尽管 Citus 确实阻止了包含修改的多语句事务,但此检查显然不适用于新COPY
支持。因此,如果您实际上正在执行 a COPY
and not INSERT
、UPDATE
或DELETE
,则可以使用BEGIN
andLOCK
来获得您想要的单写语义:
BEGIN;
LOCK target_table IN ACCESS EXCLUSIVE MODE;
COPY target_table FROM '/file/on/server';
\copy target_table from '~/local/file'
COMMIT;
如果并发会话尝试针对此表执行INSERT
、UPDATE
或DELETE
,它将阻塞,直到上述事务块提交。