在Squirrel连接PostgresDB时执行函数/存储过程报错求助
解决PostgreSQL在Squirrel中调用函数/存储过程的语法问题
你遇到的问题核心很明确——PostgreSQL根本不支持exec这个调用语法,exec是SQL Server、MySQL这类数据库的用法,PostgreSQL有自己专属的函数/存储过程调用规则,咱们来调整一下:
1. 调用普通函数(FUNCTION)的正确姿势
先确认pglog_read是PostgreSQL的函数对象,分两种情况处理:
- 如果函数返回单个标量值(比如字符串、数字):
直接用SELECT语句调用即可:
SELECT pglog_read('Thu');
- 如果函数返回的是结果集/表类型:
需要用SELECT * FROM来获取完整的返回数据:
SELECT * FROM pglog_read('Thu');
2. 调用存储过程(PROCEDURE,PostgreSQL 11+版本专属)
如果pglog_read是PostgreSQL 11及以上版本的存储过程(注意PostgreSQL里FUNCTION和PROCEDURE是完全不同的数据库对象),那就要用CALL关键字:
CALL pglog_read('Thu');
关于Squirrel客户端的小补充
你提到的插件列表不用过度担心,只要Squirrel已经通过PostgreSQL JDBC驱动成功连接数据库,上面的语法都能正常执行,不需要额外插件来支持函数/存储过程调用。如果还是有问题,可以做两个小检查:
- 验证函数/存储过程是否存在:执行
SELECT * FROM pg_proc WHERE proname = 'pglog_read';,确认它在当前连接的数据库和schema下 - 核对参数类型:确认你传入的
'Thu'和函数定义的参数类型匹配(比如参数是否为text类型)
内容的提问来源于stack exchange,提问作者bollsg
相关产品推荐
相关产品推荐

