Aktualizowanie wierszy bazy danych bez blokowania tabeli w PostgreSQL 9.2
Próbuję uruchomić instrukcję aktualizacji w ten sposób na stole, używając PostgreSQL 9.2:
UPDATE table
SET a_col = array[col];
Musimy być w stanie uruchomić to w ~ 10M tabeli wierszy, a nie zablokować tabeli (więc normalne operacje mogą się nadal odbywać, gdy aktualizacja jest uruchomiona). Wierzę, że użycie kursora będzie prawdopodobnie właściwym rozwiązaniem, ale naprawdę nie mam pojęcia, czy to jest, ani jak powinienem je implementować za pomocą kursora.
Wymyśliłem ten kod kursora, który moim zdaniem może być dobry.
Edytuj: Dodano funkcję kursora
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;