Atualizando linhas do banco de dados sem bloquear a tabela no PostgreSQL 9.2
Tentando executar uma instrução de atualização como essa em uma tabela, usando o PostgreSQL 9.2:
UPDATE table
SET a_col = array[col];
Precisamos ser capazes de rodar isso em uma tabela de 10 milhões de linhas, e não bloqueá-lo (então as operações normais ainda podem acontecer enquanto a atualização estiver em execução). Eu acredito que usar um cursor provavelmente será a solução certa, mas eu realmente não tenho idéia se é ou como eu deveria implementá-lo usando um cursor.
Eu criei este código de cursor, que acho que pode ser bom.
Editar: Adicionado função do cursor
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;