Node.js - PostgreSQL - 无法确定参数 $1 错误的数据类型

wiz*_*ard 7 javascript postgresql node.js pg pg-promise

我正在尝试使用 node.js npm 包创建 PostgreSQL 准备好的语句pg。但是,我不断收到错误:

无法确定参数 $1 的数据类型

 function promiseQuery(sql, values) {
    return new Promise(function(resolve, reject) {
        pool.query('select $1 from workers', ['name'], function(err, result) {
            if (err) {console.log(err); reject(err)}
            else resolve(result.rows);   
        })
    });
}
Run Code Online (Sandbox Code Playgroud)

在数据库中,该name字段设置为 type text not null

我也尝试了pg-promise,但也没有成功。

Dan*_*ité 4

在查询中,从SQL语法select name from workers的角度来看是一个,并且标识符永远不能作为参数传递,它们必须逐字出现在命令中。否则无法准备查询。 nameidentifier$N

$N参数只能出现在查询中文字(常量)所在的位置。

PREPARE如果在任何客户端库之外尝试使用 SQL 命令类似的操作,您会遇到相同的错误:

PREPARE p as SELECT $1 FROM pg_class;
ERROR:  could not determine data type of parameter $1
Run Code Online (Sandbox Code Playgroud)

解决方案是在将查询提交到数据库之前,使用列名或表名的字符串替换技术在 JavaScript 中构建查询。

pg-promise 确实支持使用特定语法将标识符注入到查询中。从它的文档来看:

db.query('SELECT $1:name FROM $2:name', ['*', 'table']);
//=> SELECT * FROM "table"
Run Code Online (Sandbox Code Playgroud)