Database Postgres写/读锁

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+上有跳过锁定的选项: 如果需要从表

我有多线程的JEE应用程序,运行更新限制1选择;在每个事务中使用WHERE子句和Update行查询表,这将创建行级写锁,并且不会阻止读卡器读取


有没有办法配置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;