问题描述
我正在尝试在其text
参数中使用ParameterizedQuery
的SQL Names。
我知道文档读取到此参数必须为string
或QueryFile
。
基本上,我想做的是:
import pgPromise from 'pg-promise';
const pgp = pgPromise();
const pq = new pgp.ParameterizedQuery({
text: `
SELECT $1:name from my_table
where $2:name = $3;
`,rowMode: 'array'
});
const params = {user_col: 'user',id_col: 'id',id_value: 'XXX'};
try {
return await this.db.any(pq,Object.values(params));
} catch (e) {
console.error(e);
return e;
}
我得到的是这样的错误:
QUERY: {
[start:run] text: '\n' +
[start:run] ' SELECT $1:name from my_table\n' +
[start:run] ' where $2:name = $3;\n' +
[start:run] ' ',[start:run] values: [ 'user','id','XXX' ],[start:run] rowMode: 'array'
[start:run] }
[start:run] error: Syntax error at or near ":"
是否可以在:name
中使用~
(或ParameterizedQuery
)?问题是,我真的希望查询结果是行数组而不是行对象数组,而ParameterizedQuery的参数rowMode
设置为array
似乎是我唯一的方法。>
解决方法
来自Formatting Filters文档:
请注意,格式过滤器仅适用于普通查询,在PreparedStatement或 ParameterizedQuery,因为按照定义,这些是在服务器端格式化的。
此问题后添加了官方文档中的注释,因为该注释之前曾出现过几次。希望从现在开始,情况会更加清楚。