How do I send in parameters in COPY TO-query in node-postgres

谁说我不能喝 提交于 2020-01-30 10:55:50

问题


Im doing a query to export results to CSV in postgres running on a ubuntu-server.

The query gets called from a Node-API which is connecting to Postgres via the node-postgres-driver(https://node-postgres.com/).

The query looks like this:

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 \',\'';

Whenever I try to use this query with parameters I get a exception that postgres expected 0 parameters and got 2. How do you send in parameters to a query like this?

If I query with static text like this, it works:

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 \',\'';

Code in Node:

var params = ['2018-01-01', '2018-01-28']

 let dbResult;
            try {
                    dbResult = await GetStuff(sqlText, params);
            } catch (err) {

            }

回答1:


COPY is an utility statement, and as such doesn't support parametrized execution.

Either the parameters should be injected client-side, or, if you prefer not to, injected server-side with dynamic SQL implemented in a function.

An example is shown in Use function variable in dynamic COPY statement.



来源:https://stackoverflow.com/questions/49048126/how-do-i-send-in-parameters-in-copy-to-query-in-node-postgres

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!