小编bma*_*bma的帖子

Postgres pg_try_advisory_lock会阻止所有记录

pg_try_advisory_lock()在Postgres 使用.

接下来的两个查询会锁定多个记录table1:

1)

SELECT a.id
FROM table1 a
JOIN table2 b ON a.table1_id = b.id
WHERE
    table2.id = 1
    AND
    pg_try_advisory_lock('table1'::regclass::integer, a.id)
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

SELECT a.id
FROM table1 a
JOIN table2 b ON a.table1_id = b.id
WHERE table2.id = 1
Run Code Online (Sandbox Code Playgroud)

返回一条记录.

2)

SELECT a.id
FROM table1 a
JOIN table2 b ON a.table1_id = b.id
JOIN table3 c ON b.table2_id = c.id
WHERE
    table3.id = 1
    AND
    pg_try_advisory_lock('table1'::regclass::integer, a.id)
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

但是我pg_try_advisory_lock()只需要锁定一条记录.

怎么了? …

sql postgresql locking

4
推荐指数
1
解决办法
1437
查看次数

c3p0:会话级咨询锁

我正在使用c3p0和postgres.我有一个多线程应用程序,如果没有正确的锁定,不同的线程可能会意外更新同一条记录.为了防止这种情况,我打算使用咨询锁.

SELECT pg_advisory_lock(id) FROM ...;
Run Code Online (Sandbox Code Playgroud)

但是,我不确定我是否可以将咨询锁与连接池结合使用,因为用于创建锁的连接会被关闭(这对应用程序逻辑是透明的)?相应的锁是否被释放?

postgresql c3p0

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

标签 统计

postgresql ×2

c3p0 ×1

locking ×1

sql ×1