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

调用PostgreSQL存储过程传参报错:无匹配名称与参数类型

PostgreSQL存储过程调用报错解决方案

修正存储过程删除语句

你写的DROP PROCEDURE语句存在语法问题:指定参数时不需要写参数名,仅需声明类型。原语句里的date text会被PostgreSQL误判为参数名加类型组合,导致删除操作无法匹配目标存储过程。正确写法:

DROP PROCEDURE IF EXISTS updateTransactionsFromBackups(text);

重新创建存储过程

先执行上面的修正版删除语句,再重新运行你的存储过程创建脚本,确保存储过程成功生成。

验证存储过程存在性

在psql终端执行以下命令,确认存储过程是否存在且参数类型匹配:

\df updateTransactionsFromBackups

或者通过系统表查询:

SELECT proname, oidvectortypes(proargtypes) AS args FROM pg_proc WHERE proname = 'updatetransactionsfrombackups';

检查结果中是否存在参数类型为text的对应存储过程。

正确调用存储过程

调用时无需显式转换text类型(字符串字面量默认就是text类型),直接执行:

CALL updateTransactionsFromBackups('2023-03-13');

额外修复:COPY语句的动态路径问题

另外,你的存储过程里COPY直接使用变量path会报错——PostgreSQL的COPY语法不支持直接用变量作为文件路径,必须通过动态SQL处理:

BEGIN
path := '/var/www/old_backup_' || date || '.sql';
EXECUTE format('COPY old_transactions(id,user_id) FROM %L NULL AS ''NULL'' DELIMITER E''\t'' CSV HEADER', path);
END;

用format函数的%L占位符可以自动转义路径字符串,同时避免SQL注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:12:56