如何在node-postgres中的COPY TO-query中发送参数

问题描述 投票:0回答:1

我正在进行查询,以便在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) {

            }
sql node.js postgresql node-postgres
1个回答
1
投票

COPY是一个实用程序语句,因此不支持参数化执行。

参数应该在客户端注入,或者,如果您不愿意,请在服务器端注入函数中实现的动态SQL。

Use function variable in dynamic COPY statement中显示了一个示例。

© www.soinside.com 2019 - 2024. All rights reserved.