Postgresql t在之后选择更新即可。在发出rollback或commit之前,任何update或select for update都不会触及这些行。在事务中,它可以正常工作。但问题是rollback now。Php文件do_search.Php用于查询执行,它调用函数g

Postgresql t在之后选择更新即可。在发出rollback或commit之前,任何update或select for update都不会触及这些行。在事务中,它可以正常工作。但问题是rollback now。Php文件do_search.Php用于查询执行,它调用函数g,postgresql,select,locking,Postgresql,Select,Locking,t在之后选择更新即可。在发出rollback或commit之前,任何update或select for update都不会触及这些行。在事务中,它可以正常工作。但问题是rollback now。Php文件do_search.Php用于查询执行,它调用函数get_all_words函数并锁定用于更新的行事务并将结果回送到get_words.php(该文件通过ajax调用do_search.php)。现在,在处理所有提取的字之前,它不应该被解锁。那么我应该将回滚放在哪里,或者是否有方法获取事务id并


t在
之后选择更新
即可。在发出
rollback
commit
之前,任何
update
select for update
都不会触及这些行。在事务中,它可以正常工作。但问题是rollback now。Php文件do_search.Php用于查询执行,它调用函数get_all_words函数并锁定用于更新的行事务并将结果回送到get_words.php(该文件通过ajax调用do_search.php)。现在,在处理所有提取的字之前,它不应该被解锁。那么我应该将回滚放在哪里,或者是否有方法获取事务id并在处理完所有字后回滚该事务。如果无法将整个操作放入一个事务中,则需要使用显式的“手工”锁定。(对于池连接,您甚至无法回滚,因为在下一页加载时可能会获得不同的连接。)这让我们回到了每一行中都有一个标志的想法,您可以在每次“锁定”行以进行操作时更新该标志,然后在完成后再次更新(重置)。
id |    txt
-------------------
1 |    World 
2 |    Text
3 |    Crawler
4 |    Solution
5 |    Nation
6 |    Under
7 |    Padding
8 |    Settle
9 |    Begin
10 |    Large
11 |    Someone
12 |    Dance
select * from table1 order by id limit 5;
select * from table1 where id>10 order by id limit 5;
select pg_advisory_lock(id), * from ( select * table1 order by id limit 5 ) t
/*rows are locking but limit is the problem*/
select * from table1 where  pg_try_advisory_lock( id) limit 5;
.
.
$_SESSION['rows'] = $rowcount; // no of row to process
.
.
/*afer each process of word*/
$_SESSION['rows'] -=1;
.
.
/*and finally unlock locked rows*/
if ($_SESSION['rows']===0)
select pg_advisory_unlock_all() from table1