Aktualisieren von Datenbankzeilen ohne Sperren der Tabelle in PostgreSQL 9.2

Der Versuch, eine Update-Anweisung wie diese mit PostgreSQL 9.2 für eine Tabelle auszuführen:

UPDATE table
    SET a_col = array[col];

Wir müssen in der Lage sein, dies auf einer ~ 10M-Zeilentabelle auszuführen, und nicht, dass sie die Tabelle blockiert (so dass normale Vorgänge immer noch stattfinden können, während das Update ausgeführt wird). Ich glaube, die Verwendung eines Cursors wird wahrscheinlich die richtige Lösung sein, aber ich habe wirklich keine Ahnung, ob dies der Fall ist oder wie ich es mithilfe eines Cursors implementieren sollte.

Ich habe mir diesen Cursor-Code ausgedacht, der meiner Meinung nach gut sein könnte.

Bearbeiten: Cursorfunktion hinzugefügt

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;

Antworten auf die Frage(1)

Ihre Antwort auf die Frage