相关疑难解决方法(0)

更新数据库行而不在PostgreSQL 9.2中锁定表

尝试使用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;

database postgresql cursor sql-update

9
推荐指数
1
解决办法
8247
查看次数

标签 统计

cursor ×1

database ×1

postgresql ×1

sql-update ×1