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;