--当update语句执行时,如果其可以获得锁其会首先获得一个排它锁 ExclusiveLock
--在session 1 中 开启一个事务
postgres=# begin;
BEGIN
postgres=# update t set user_name='test rudy' where id=1;
--在session 2 中进行查询
postgres=# SELECT locktype,
pg_locks.pid,
virtualtransaction,
transactionid,
nspname,
relname,
mode,
granted,
CASE
WHEN granted='f' THEN
'get_lock'
WHEN granted='t' THEN
'wait_lock'
END lock_satus,
CASE
WHEN waiting='f' THEN
'waiting'
WHEN waiting='t' THEN
'executing'
END lock_satus, cast(date_trunc('second',query_start) AS timestamp) AS query_start, substr(query,1,25) AS query
FROM pg_locks LEFT OUTER
JOIN pg_class
ON (pg_locks.relation = pg_class.oid) LEFT OUTER
JOIN pg_namespace
ON (pg_namespace.oid = pg_class.relnamespace), pg
postgresql的update锁等待
最新推荐文章于 2024-05-27 23:15:56 发布
本文介绍了PostgreSQL数据库中update语句如何获取和等待锁的过程。在事务中,当一个session尝试更新某条记录时,会先获得排他锁(ExclusiveLock),而其他session若尝试相同操作,则会等待前一个事务结束,先获取共享锁(ShareLock),最终升级为排他锁。通过监控pg_locks和pg_stat_activity表,可以观察到锁的状态和等待情况。
摘要由CSDN通过智能技术生成