Обсуждение: cursor with hold must be save to disk?

Поиск
Список
Период
Сортировка

cursor with hold must be save to disk?

От
黄宁
Дата:
i want to use cursor with hold ,but when I declare a curosr , it takes a long time to save the result set to disk. can i save the query state in memory? and fetch forward the next result.


Re: cursor with hold must be save to disk?

От
Adrian Klaver
Дата:
On 4/14/23 04:04, 黄宁 wrote:
> i want to use cursor with hold ,but when I declare a curosr , it takes a 
> long time to save the result set to disk. can i save the query state in 
> memory? and fetch forward the next result.
> 

 From the docs:

https://www.postgresql.org/docs/current/sql-declare.html

A cursor created with WITH HOLD is closed when an explicit CLOSE command 
is issued on it, or the session ends. In the current implementation, the 
rows represented by a held cursor are copied into a temporary file or 
memory area so that they remain available for subsequent transactions.

So I am going to guess the cursor query is holding a large amount of data.

To get a more specific answer you will need to provide:

1) Postgres version.

2) The complete DECLARE command being used.

3) An indication of the amount of data being retrieved.

4) The actual time for a 'long time'.

-- 
Adrian Klaver
adrian.klaver@aklaver.com




Re: cursor with hold must be save to disk?

От
Laurenz Albe
Дата:
On Fri, 2023-04-14 at 19:04 +0800, 黄宁 wrote:
> i want to use cursor with hold ,but when I declare a curosr , it takes a long
> time to save the result set to disk. can i save the query state in memory?
> and fetch forward the next result.

The complete result set has to be materialized.  It only spills to disk if it
is large.  That cannot be avoided.

Yours,
Laurenz Albe



Re: cursor with hold must be save to disk?

От
黄宁
Дата:
the Postgresql version is 13.6
and the DECLARE COMMAND IS

declare sdx_3a6c_8 no scroll binary cursor without hold for select "roalkL"."smid","roalkL"."smgeometry" from "public"."roalkL" where "roalkL"."smgeometry" && st_makeenvelope(321673.3153346270555630,3375950.6560412631370127,367212.1915803211741149,3402758.1912380573339760,32649)

the data might be 1GB,and we need get all in about 10 seconds.

Adrian Klaver <adrian.klaver@aklaver.com> 于2023年4月14日周五 23:11写道:
On 4/14/23 04:04, 黄宁 wrote:
> i want to use cursor with hold ,but when I declare a curosr , it takes a
> long time to save the result set to disk. can i save the query state in
> memory? and fetch forward the next result.
>

 From the docs:

https://www.postgresql.org/docs/current/sql-declare.html

A cursor created with WITH HOLD is closed when an explicit CLOSE command
is issued on it, or the session ends. In the current implementation, the
rows represented by a held cursor are copied into a temporary file or
memory area so that they remain available for subsequent transactions.

So I am going to guess the cursor query is holding a large amount of data.

To get a more specific answer you will need to provide:

1) Postgres version.

2) The complete DECLARE command being used.

3) An indication of the amount of data being retrieved.

4) The actual time for a 'long time'.

--
Adrian Klaver
adrian.klaver@aklaver.com