如何在Postgresql中解决对锁定数据库的更新查询?

问题描述

使用postgresql,如果用户想在数据库被锁定时添加新数据或更新数据库中的现有数据,如何解决他的事务?让我们考虑这种情况,如果我的理解在任何时候都是错误的,请纠正我:

1. User 1 wants to batch update some records in the database.
2. The transaction from user 1 locks the database until all the updates are pushed.
3. User 2 wants to update something in the database,or insert some new data to the database while it is locked.
4. Based on what MVCC denotes,user 2 is shown the pre-lock version of the database.
5. User 2 inserts or updates the data.
6. User one finishes pushing its transaction and releases the database.
7. There are two versions of database Now,the data is resolved.

如何解决第7步中的问题?我在某处读到它将带最新全球时间戳记的数据。但是,如何确定应该保留的数据呢?如果来自用户2的数据优先于用户1,但来自用户2的事务在用户1之前完成,该优先级将如何解决?谢谢您的帮助。

解决方法

您不能在PostgreSQL中锁定数据库,但可以独占地锁定表。这是您绝对不应该做的事情,因为这是不必要的,并且会损害并发性和系统维护过程(自动清理)。

您修改或删除的每一行将在交易期间自动锁定。这不会影响并发会话对其他行的修改。

如果一个事务试图修改已经被另一个事务锁定的行,则第二个事务将被阻塞,并且必须等到第一个事务完成之后。这样可以避免您描述的情况。