Sql 在关系表中循环
在更改Limit和offset的值时,是否可以在postgres中循环。我想循环到关系表的末尾。我想要动态设置限制和偏移量的原因是,我只有很少的1GB虚拟内存,因此进程将被终止 目前我采用的方法是手动设置limit和offset的值Sql 在关系表中循环,sql,linux,postgresql,Sql,Linux,Postgresql,在更改Limit和offset的值时,是否可以在postgres中循环。我想循环到关系表的末尾。我想要动态设置限制和偏移量的原因是,我只有很少的1GB虚拟内存,因此进程将被终止 目前我采用的方法是手动设置limit和offset的值 select * from my_relational_table limit 1000 offset 0; select * from my_relational_table limit 1000 offset 1000; select * from my_
select * from my_relational_table limit 1000 offset 0;
select * from my_relational_table limit 1000 offset 1000;
select * from my_relational_table limit 1000 offset 2000;
是否可以在postgres中自动执行该过程,以便在到达关系表末尾时停止循环。是的,这是可能的。您可以使用游标和命令FETCH
postgres=# begin read only;
BEGIN
postgres=# declare xx cursor for select * from generate_series(1,100);
DECLARE CURSOR
postgres=# fetch 2 xx;
generate_series
-----------------
1
2
(2 rows)
postgres=# fetch 2 xx;
generate_series
-----------------
3
4
(2 rows)
postgres=# fetch 2 xx;
generate_series
-----------------
5
6
(2 rows)
postgres=# fetch 2 xx;
generate_series
-----------------
7
8
(2 rows)
postgres=# commit;
COMMIT
谢谢你的帮助。你不认为postgres还需要很多人工干预吗;我说的是自动化这个过程,这样用户就不必再次输入fetch 2 xx,psql处理的againmemory请求可以减少\set fetch\u COUNT 1000-其他工作由pager@PavelStehule我还是不明白。你能举例说明吗。也谢谢你replying@PavelStehule因为这里的选择是在从generate_series(1100)选择*上进行的;那么如何从关系表中选择数据呢?您可以使用任意选择,而不仅仅是生成序列。