簡體   English   中英

PostgreSQL:為准備好的語句聲明一個游標

[英]PostgreSQL: Declare a cursor for prepared statement

以下DECLARE失敗:

PREPARE stmt(bigint) AS SELECT ...;
DECLARE crs CURSOR FOR stmt;

https://www.postgresql.org/docs/9.6/static/sql-declare.htmlstmt ,必須為SELECTVALUES命令。

我在代碼的延遲至關重要的部分中使用PREPARE語句,其中發出了數千個快速查詢。 每次解析並生成查詢計划都是性能殺手。 但是,在極少數情況下,查詢可以返回數百萬條記錄,並且結果不適合內存。

有沒有辦法在PostgreSQL中為准備好的語句聲明游標? 如果沒有,是否有任何解決方法?

https://www.postgresql.org/docs/9.1/static/ecpg-commands.html#ECPG-EXECUTING

這可以通過使用C代碼的ECPG C庫來完成。 可以使用C代碼創建准備好的語句,如下所示:

EXEC SQL PREPARE stmt1 FROM "SELECT oid,datname FROM pg_database WHERE oid > ?";

然后為該語句創建游標為:

EXEC SQL DECLARE foo_bar CURSOR FOR stmt1;

在無限循環內從游標獲取結果。

EXEC SQL OPEN foo_bar USING 100;


while(1){
    EXEC SQL FETCH NEXT FROM foo_bar INTO :dboid, :dbname;
}

9.1版本的postgresql可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM