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

如何向PostgreSQL查询语句的单引号内部传递参数?

PostgreSQL参数绑定报错修复方案

错误原因

报错的核心原因是$1、$2参数占位符被包裹在单引号内部,PostgreSQL预编译机制会将单引号内的内容识别为普通字符串,不会解析为参数占位符,因此系统判定这条SQL无需绑定参数,才会返回对应报错。

修复代码

写法1:数值乘固定时间间隔(兼容性好)

const text = `UPDATE glacier_restore_progress
            SET 
            status='completed',
            restore_end=CURRENT_TIMESTAMP,
            restore_expire=DATE_TRUNC('minutes', current_timestamp + $1 * interval '1 minute')
            WHERE file_path = $2 AND date_trunc('minutes', current_timestamp - $1 * interval '1 minute') <= restore_start`;

const values = [restoreDuration, fileKey];
await pool.query(text, values);

写法2:使用make_interval内置函数(可读性更强)

PostgreSQL提供的make_interval函数支持直接传入数值构造时间间隔,代码可读性更高:

const text = `UPDATE glacier_restore_progress
            SET 
            status='completed',
            restore_end=CURRENT_TIMESTAMP,
            restore_expire=DATE_TRUNC('minutes', current_timestamp + make_interval(mins => $1))
            WHERE file_path = $2 AND date_trunc('minutes', current_timestamp - make_interval(mins => $1)) <= restore_start`;

const values = [restoreDuration, fileKey];
await pool.query(text, values);

注意事项

  • 所有参数占位符$n不需要额外加单引号包裹,pg库会自动根据参数类型做转义处理,手动加单引号会导致占位符失效,还会引发SQL注入风险。
  • 字符串类型的参数也无需手动加单引号,预编译机制会自动完成类型匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:21:01