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