В Citus, как заблокировать распределенную таблицу во время копирования?
Citus не поддерживает транзакции с несколькими операторами для команд изменения данных, что делает невозможным использование LOCK
команда для предотвращения одновременного доступа во время миграции данных.
Есть ли способ заблокировать доступ к таблице во время начальной миграции данных?
1 ответ
Хотя 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
для этой таблицы он будет блокироваться до тех пор, пока не будет зафиксирован вышеуказанный блок транзакции.