Javascript 在复制和pg查询流中使用占位符
我正在尝试将查询提取为csv文件。我尝试使用copy with pg query stream执行查询,但遇到以下错误: 错误:bind消息提供1个参数,但准备好的语句需要0 当从查询中删除副本时,它可以与占位符一起工作。如果我提供了一个带有副本而没有占位符的查询,它也可以工作Javascript 在复制和pg查询流中使用占位符,javascript,node.js,postgresql,pg-promise,Javascript,Node.js,Postgresql,Pg Promise,我正在尝试将查询提取为csv文件。我尝试使用copy with pg query stream执行查询,但遇到以下错误: 错误:bind消息提供1个参数,但准备好的语句需要0 当从查询中删除副本时,它可以与占位符一起工作。如果我提供了一个带有副本而没有占位符的查询,它也可以工作 const pgp = require('pg-promise') const QueryStream = require('pg-query-stream') query1 = "copy (select *
const pgp = require('pg-promise')
const QueryStream = require('pg-query-stream')
query1 = "copy (select * from real_state WHERE town_code= $1 ) TO '/tmp/file.csv'"
const qs = new QueryStream(query1, [22])
await db.stream(qs, s => {
// initiate streaming into the console:
s.pipe(JSONStream.stringify()).pipe(process.stdout)
}).then(data => {
}).catch(error => {
console.log('ERROR:', error)
})
我认为你把两个特征混在一起了 pg query stream将行作为流返回,不需要在select there中使用copy。只需使用一个简单的选择,然后通过管道将结果传输到文件流 常量fs=需要“fs” const{Pool}=require'pg' const QueryStream=require'pg-query-stream' const query=new QueryStreamselect*from real_state WHERE town_code=$1,[22] const stream=pool.queryquery const fileStream=fs.createReadStream'/tmp/file.csv' fileStream.pipestream 如果要使用复制,请使用pg复制流: 常量fs=需要“fs” const{Pool}=require'pg' const copyFrom=需要“pg-copy-streams”。从 const stream=db.querycopyFrom'COPY real_state FROM stdin WHERE town_code=$1',[22] const fileStream=fs.createReadStream'/tmp/file.csv' fileStream.pipestream
复制上下文中有一个限制,禁止您使用任何参数 但您可以通过使用pg promise查询格式绕过该限制: const query=pgp.as.format'COPYSELECT*FROM real_state WHERE town_code=$1至$2', [22',/tmp/file.csv'];
他的代码可以很好地工作,使用我提供的work around查看我的答案。是的,但是当您已经有一个流时,使用copy有什么意义呢?看来你的工作只是想强迫他使用你的模块?强迫他使用我的模块这听起来很消极。如果你读了这个问题,他已经在使用它了,我给了他正确的解决方案,他所描述的问题。但不管出于什么原因,请随意引导他离开,开始使用不同的模块。是的,结果是否定的,他已经在使用它了。我的错,我的道歉。
query1 = "copy (select * from real_state WHERE town_code= $1 ) TO '/tmp/file.csv'" ==> error
query2 = "copy (select * from real_state) TO '/tmp/file.csv'" ==> It works
query3 = "select * from real_state WHERE town_code= $1" ==> It works