9

PostgreSQL 9.2 を使用して、テーブルで次のような更新ステートメントを実行しようとしています。

UPDATE table
    SET a_col = array[col];

これを最大 1,000 万行のテーブルで実行できる必要があり、テーブルをロックしないようにする必要があります (したがって、更新の実行中に通常の操作を行うことができます)。カーソルを使用することがおそらく正しい解決策になると思いますが、それが正しいかどうか、またはカーソルを使用してどのように実装する必要があるかは本当にわかりません。

私はこのカーソルコードを思いつきました。これは良いと思います。

編集:カーソル機能を追加

関数の作成または置換 update_fields() は $$ として VOID を返します
宣言する
        カーソル CURSOR FOR SELECT * FROM テーブル ORDER BY id FOR UPDATE;
始める
        FOR 行 IN カーソル LOOP
                UPDATE テーブル SET
                        a_col = 配列[列],
                        a_col2=配列[col2]
                WHERE CURRENT OF カーソル;
        エンドループ;
終わり;
$$ LANGUAGE plpgsql;
4

1 に答える 1