尝试使用PostgreSQL 9.2在表上运行这样的更新语句:
UPDATE table
SET a_col = array[col];
Run Code Online (Sandbox Code Playgroud)
我们需要能够在~10M的行表上运行它,而不是让它锁定表(因此在更新运行时仍然可以进行正常操作).我相信使用游标可能是正确的解决方案,但我真的不知道它是否或我应该如何使用游标实现它.
我想出了这个游标代码,我认为这可能是好的.
编辑:添加了光标功能
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;