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

能否在DBeaver中调试带输入输出参数的PL/pgSQL存储过程?

问题解决:PostgreSQL存储过程调试报错及OUT参数疑问

先解决当前报错:参数类型不匹配

报错提示找不到identity.identity_operations(unknown, unknown),核心是你传递的参数被PostgreSQL识别为unknown类型,和存储过程定义的character varying、jsonb类型不匹配。解决方法:

  • 在DBeaver调试时,给输入参数显式指定类型:
    • 对于operation_参数,输入时添加类型转换,比如写'your_operation'::varchar
    • 对于data_参数,输入JSON字符串时加上类型转换,比如'{"key": "value"}'::jsonb
  • 或者在DBeaver的参数输入界面,手动选择对应参数的类型(varchar和jsonb),避免工具自动推断类型出错。

关于是否要将OUT参数改为INOUT类型

PostgreSQL本身支持存储过程使用纯OUT参数,不需要强制改成INOUT。但部分调试工具(包括DBeaver的调试功能)对纯OUT参数的支持存在局限:

  • 如果显式转换参数类型后仍无法正常调试,再考虑把output_改成INOUT类型。修改后调用时可以传入一个空的jsonb值(比如'{}'::jsonb),调试工具就能正确识别参数类型并返回结果。
  • 注意:改成INOUT后,存储过程内部依然可以直接给该参数赋值,不会影响原有业务逻辑,只是调用时需要传入一个占位值。

额外验证建议

执行以下SQL确认存储过程的定义是否符合预期:

SELECT proname, proargtypes, proallargtypes, proargmodes
FROM pg_proc
WHERE proname = 'identity_operations' AND pronamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'identity');

查看返回的proargmodes列,正常应该是{i,i,o}(i代表IN,o代表OUT),以此确认参数模式和类型都正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:48:08