Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在关系表中循环_Sql_Linux_Postgresql - Fatal编程技术网

Sql 在关系表中循环

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_

在更改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_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)选择*上进行的;那么如何从关系表中选择数据呢?您可以使用任意选择,而不仅仅是生成序列。