You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单节点Redshift执行FETCH NEXT时仍触发FETCH ALL不支持错误求助

单节点Redshift调用存储过程时FETCH语法报错问题

使用SQL Workbench/J操作单节点Redshift(规格dc2.large,节点数1)时遇到异常:明明按照AWS官方文档要求,使用了单节点必须的FETCH NEXT语法调用返回游标的存储过程,却依然报错。尝试改用FORWARD 1、FORWARD 0也无法解决。

报错信息

错误:单节点集群不支持Fetch ALL操作。请指定获取行数(单节点集群最大为1000),或升级到多节点集群。

存储过程及调用代码

CREATE OR REPLACE PROCEDURE public.sp_proc_with_in_var_two (f1 VARCHAR, rs_out INOUT refcursor)
AS$$ 
BEGIN    
    RAISE INFO 'f1 = %',f1;    
    OPEN rs_out FOR SELECT f1 as v;   
END;
$$ LANGUAGE plpgsql;

/BEGIN;
CALL public.sp_proc_with_in_var_two('my_val_to_show','mycur');
FETCH NEXT 1 FROM mycur;
COMMIT;

环境配置

  • Redshift集群:单节点,规格dc2.large
  • 客户端工具:SQL Workbench/J(版本12.2 build 1290)
  • JDBC驱动:Redshift JDBC 4.2 Driver 2.1.0.14

解决方案

问题出在SQL Workbench/J的默认游标处理行为上:工具会自动在执行完你写的FETCH NEXT 1后,额外执行一次FETCH ALL来获取剩余数据,这就触发了单节点Redshift的限制。

有两种解决方式:

  1. 修改SQL Workbench/J游标设置

    • 打开连接属性,切换到「ResultSet」选项卡
    • 勾选「Use 'FETCH n' instead of 'FETCH ALL'」,设置行数为1000(单节点集群上限)
    • 保存设置后重新连接集群,再执行调用代码即可
  2. 替换游标为直接返回结果集
    如果业务不需要游标,可以修改存储过程直接返回查询结果,规避游标操作:

    CREATE OR REPLACE PROCEDURE public.sp_proc_with_in_var_two (f1 VARCHAR)
    AS$$ 
    BEGIN    
        RAISE INFO 'f1 = %',f1;    
        SELECT f1 as v;   
    END;
    $$ LANGUAGE plpgsql;
    
    -- 调用简化为:
    CALL public.sp_proc_with_in_var_two('my_val_to_show');
    

内容的提问来源于stack exchange,提问作者marcin2x4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:40:20