Database Postgres写/读锁
我有多线程的JEE应用程序,运行更新限制1选择;在每个事务中使用WHERE子句和Update行查询表,这将创建行级写锁,并且不会阻止读卡器读取Database Postgres写/读锁,database,postgresql,postgresql-9.2,Database,Postgresql,Postgresql 9.2,我有多线程的JEE应用程序,运行更新限制1选择;在每个事务中使用WHERE子句和Update行查询表,这将创建行级写锁,并且不会阻止读卡器读取 有没有办法配置postgres,阻止读卡器使用写锁定读取行?在postgres 9.5+上有跳过锁定的选项: 如果需要从表中进行选择,并在事务完成之前保护这些行不被更新,则可以指定进行更新,但如果某些行被锁定,则可以指定SKIP locked,告诉它忽略这些行,只对其可以访问的任何行执行操作 在postgres 9.5+上有跳过锁定的选项: 如果需要从表
有没有办法配置postgres,阻止读卡器使用写锁定读取行?在postgres 9.5+上有
跳过锁定的选项:
如果需要从表中进行选择,并在事务完成之前保护这些行不被更新,则可以指定进行更新,但如果某些行被锁定,则可以指定SKIP locked,告诉它忽略这些行,只对其可以访问的任何行执行操作
在postgres 9.5+上有跳过锁定的选项:
如果需要从表中进行选择,并在事务完成之前保护这些行不被更新,则可以指定进行更新,但如果某些行被锁定,则可以指定SKIP locked,告诉它忽略这些行,只对其可以访问的任何行执行操作
如果你是运行N Postgres,这里有一个选项如果你是运行N Postgres,这里有一个选项
DO $$
DECLARE
r RECORD;
... -- your variables
BEGIN
FOR r IN
SELECT some_id
FROM some_table
WHERE ... -- your conditions
ORDER BY ... -- your ordering
LIMIT ... -- your limit
LOOP
BEGIN
SELECT ... -- your needed column(s)
INTO ... -- your defined variable(s)
FROM some_table -- the same table
WHERE some_id = r.some_id -- only check this one record
FOR UPDATE NOWAIT; -- don't wait for parallel transactions
EXIT;
EXCEPTION WHEN lock_not_available THEN
CONTINUE;
END;
END LOOP;
... -- do something based on variables, or move this before the EXIT above
END;
$$ LANGUAGE plpgsql;