pg-promise:SQL名称〜或:name似乎不适用于ParameterizedQuery

问题描述

我正在尝试在其text参数中使用ParameterizedQuerySQL Names

我知道文档读取到此参数必须为stringQueryFile

基本上,我想做的是:

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文档:

请注意,格式过滤器仅适用于普通查询,在PreparedStatementParameterizedQuery,因为按照定义,这些是在服务器端格式化的。

此问题后添加了官方文档中的注释,因为该注释之前曾出现过几次。希望从现在开始,情况会更加清楚。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...