postgresql的update锁等待

本文介绍了PostgreSQL数据库中update语句如何获取和等待锁的过程。在事务中,当一个session尝试更新某条记录时,会先获得排他锁(ExclusiveLock),而其他session若尝试相同操作,则会等待前一个事务结束,先获取共享锁(ShareLock),最终升级为排他锁。通过监控pg_locks和pg_stat_activity表,可以观察到锁的状态和等待情况。
摘要由CSDN通过智能技术生成
--当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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值