[英]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.html , stmt
,必須為SELECT
或VALUES
命令。
我在代碼的延遲至關重要的部分中使用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.