我正在进行查询,以便在ubuntu服务器上运行的postgres中将结果导出为CSV。
查询从Node-API调用,Node-API通过node-postgres-driver(https://node-postgres.com/)连接到Postgres。
查询如下所示:
var sqlText =
'Copy (SELECT company.name AS Company, SUM(sale.numbersold) AS NumberSold
FROM SALE LEFT JOIN company ON company.companyid = sale.companyid
WHERE sale.createdate BETWEEN $1 AND $2 GROUP BY company.name)
To \'/tmp/test.csv\' With CSV HEADER DELIMITER \',\'';
每当我尝试使用带有参数的查询时,我得到一个异常,即postgres期望0参数并获得2.如何将参数发送到这样的查询?
如果我查询这样的静态文本,它的工作原理:
var sqlText = 'Copy (SELECT company.name AS Company, SUM(sale.numbersold) AS NumberSold
FROM SALE LEFT JOIN company ON company.companyid = sale.companyid
WHERE sale.createdate BETWEEN \'2018-01-01\' AND \'2018-01-01\'
GROUP BY company.name)
To \'/tmp/test.csv\' With CSV HEADER DELIMITER \',\'';
节点中的代码:
var params = ['2018-01-01', '2018-01-28']
let dbResult;
try {
dbResult = await GetStuff(sqlText, params);
} catch (err) {
}
COPY
是一个实用程序语句,因此不支持参数化执行。
参数应该在客户端注入,或者,如果您不愿意,请在服务器端注入函数中实现的动态SQL。