Kev*_*vin 9 postgresql locking
我有一系列 SQL 语句,如下所示:
BEGIN;
SELECT counter FROM table WHERE id=X FOR UPDATE;
REALLY COMPLEX QUERY;
UPDATE table SET counter=Y WHERE id=X;
END;
Run Code Online (Sandbox Code Playgroud)
我想防止在重新计算计数器值时读取计数器,但根据 Postgres 文档“行级锁不影响数据查询;它们只阻止写入者到同一行。”
问题:
到 1) 只要您的事务没有提交,任何其他会话都会像在“BEGIN”语句之前一样读取由您的事务修改的数据。一旦您的事务提交,它将读取计数器的新值。关键是其他人不必等待并且将始终看到一致的数据库。
to 2), 3) 为什么不试试“ACCESS EXCLUSIVE”呢?(见http://www.postgresql.org/docs/current/static/explicit-locking.html)
编辑:如果您不喜欢使用“ACCESS EXCLUSIVE”锁锁定整个表,您也可以使用“Advisory Lock”(请参阅上面链接中的第 13.3.4 节)。
| 归档时间: |
|
| 查看次数: |
2577 次 |
| 最近记录: |