使用Knex.raw为Postgres中的\ Copy命令转义反斜杠

时间:2014-11-21 03:46:46

标签: postgresql heroku knex.js

我们试图在Knex.raw中使用\ COPY命令。我们通过heroku / postgres连接和\ COPY是批量导入数据的唯一方法,因为我们没有超级用户权限。复制前的反斜杠将被删除或乘以,具体取决于您尝试的内容。

到目前为止,我们已经尝试使用它来逃避它 1. \ b 2. 3. String.fromCharCode(92) 4.连接

我们正在使用的全部功能是......

knex.raw("\COPY tablename (column1, column2, ...columnN) FROM STDIN " + csvValues).then(function(response){
console.log('the response from the copy', response);

});

我们在pg:psql环境中测试了这个确切的功能,它运行得很好。如果您知道更好的方法,请告诉我们!

此致 布兰登

1 个答案:

答案 0 :(得分:1)

\copypsql(客户端)命令,它包装了 Postgres COPY(服务器)。听起来好像你正试图将这两者结合起来,而这就是问题所在。

由于 knex.js 是一个查询构建器,因此它不会知道\copy - \COPY无效 SQL 在客户端场景中使用。

您提到您没有超级用户访问权限,如果您想引用文件,则COPY需要访问权限。

如果由于这个原因您无法使用COPY,则需要使用 psql 并利用其\copy命令, knex.js 可能不是使用的工具。相反,您需要通过调用shell命令来访问它。

也许这批数据导入可以完全在 Javascript 之外完成?即通过直接使用 psql bash 脚本?