Node.js中参数化SET查询无法正常工作的问题求助
解决SET语句参数化查询失效的问题
问题原因
PostgreSQL的SET语句语法本身不支持使用参数化占位符(如$1)来赋值,这类会话控制语句的右侧值不允许通过参数化传递,而SELECT等DML语句的条件表达式是支持参数化的,所以才会出现你遇到的差异。
解决方案
改用PostgreSQL内置的set_config函数来实现会话变量的参数化赋值,这个函数支持参数化占位符,同时能达到和SET一样的效果:
databaseClient.query('SELECT set_config($1, $2, false)', ['myvars.something', something]);
- 第一个参数
$1是带命名空间的完整变量名 - 第二个参数
$2是要设置的变量值 - 第三个参数
false表示仅当前会话生效(设为true会将配置持久化到系统,需对应权限)
为什么模板字符串能生效
模板字符串是直接将变量值拼接成完整的SQL语句后执行,相当于手动构造了包含具体值的SET语句,但这种方式存在SQL注入风险,除非能确保变量值绝对安全,否则不建议使用。
内容的提问来源于stack exchange,提问作者Christoforos Seas
相关产品推荐
相关产品推荐

