В 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 для этой таблицы он будет блокироваться до тех пор, пока не будет зафиксирован вышеуказанный блок транзакции.

Другие вопросы по тегам