我想查询大量的行并显示给用户,但是用户只会看到10行,我会使用LIMIT和OFFSET,他会按下' next'用户界面中的按钮将被提取下一行。
数据库会一直更新,有没有办法保证用户会看到第一个选择中的下10行数据,所以如果他没有反映数据的任何变化选择查看接下来的10行结果。
这就像使用SELECT语句作为过去的快照一样,第一个SELECT之后的任何后续更新都不会对后续的SELECT LIMIT OFFSET可见。
答案 0 :(得分:1)
您可以使用游标,例如:
drop table if exists test;
create table test(id int primary key);
insert into test
select i from generate_series(1, 50) i;
declare cur cursor with hold for
select * from test order by id;
move absolute 0 cur; -- get 1st page
fetch 5 cur;
id
----
1
2
3
4
5
(5 rows)
truncate test;
move absolute 5 cur; -- get 2nd page
fetch 5 cur; -- works even though the table is already empty
id
----
6
7
8
9
10
(5 rows)
close cur;
请注意,它是相当昂贵的解决方案。声明的游标会创建一个包含完整结果集(快照)的临时表。这可能会导致大量服务器负载。就个人而言,我宁愿寻找替代方法(动态结果)。