Обновление строк базы данных без блокировки таблицы в PostgreSQL 9.2
Попытка выполнить оператор обновления, подобный этому, для таблицы, используя PostgreSQL 9.2:
UPDATE table
SET a_col = array[col];
Мы должны иметь возможность выполнить это на ~ 10M таблице строк, и при этом она не должна блокировать таблицу (чтобы обычные операции все еще могли происходить во время выполнения обновления). Я полагаю, что использование курсора, вероятно, будет правильным решением, но я действительно понятия не имею, если это так или как я должен реализовать его с помощью курсора.
Я придумал этот код курсора, который, я думаю, может быть хорошим.
Редактировать: Добавлена функция курсора
CREATE OR REPLACE FUNCTION update_fields() RETURNS VOID AS $$ DECLARE cursor CURSOR FOR SELECT * FROM table ORDER BY id FOR UPDATE; BEGIN FOR row IN cursor LOOP UPDATE table SET a_col = array[col], a_col2= array[col2] WHERE CURRENT OF cursor; END LOOP; END; $$ LANGUAGE plpgsql;