在 Citus 中,如何在 COPY 期间锁定分布式 table?
In Citus, how do I lock a distributed table during a COPY?
Citus 不支持数据修改命令的多语句事务,因此无法使用LOCK
命令在数据迁移过程中防止并发访问。
有什么方法可以在初始数据迁移期间锁定对 table 的访问?
尽管 Citus 确实阻止了包含修改的多语句事务,但此检查显然不适用于新的 COPY
支持。因此,如果您实际上是在执行 COPY
而不是 INSERT
、UPDATE
或 DELETE
,则可以使用 BEGIN
和 LOCK
来获取您想要的单写语义:
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
table,它将阻塞,直到上述事务块提交。
Citus 不支持数据修改命令的多语句事务,因此无法使用LOCK
命令在数据迁移过程中防止并发访问。
有什么方法可以在初始数据迁移期间锁定对 table 的访问?
尽管 Citus 确实阻止了包含修改的多语句事务,但此检查显然不适用于新的 COPY
支持。因此,如果您实际上是在执行 COPY
而不是 INSERT
、UPDATE
或 DELETE
,则可以使用 BEGIN
和 LOCK
来获取您想要的单写语义:
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
table,它将阻塞,直到上述事务块提交。