Node.js 溪流;“返回”;从插入到pg承诺

Node.js 溪流;“返回”;从插入到pg承诺,node.js,stream,pg-promise,Node.js,Stream,Pg Promise,这里的目标是将返回的数据从插入到..流到写入流 即 const write\u stream=fs.createWriteStream('file.csv')) client.query(` 插入表1(列) 选择 来自表2 返回* `) 。然后(返回=>{ 返回的.rows.pipe(写入流) }) 这在pg promise中是否可行 此时,返回的响应。行包含数组[{}]中的所有数据,因此上述示例不起作用,因此唯一的解决方案可能需要分别插入和选择,但是如果我可以简单地获取返回的数据,那就太好了

这里的目标是将
返回的
数据从
插入到..
流到写入流

const write\u stream=fs.createWriteStream('file.csv'))
client.query(`
插入表1(列)
选择
来自表2
返回*
`)
。然后(返回=>{
返回的.rows.pipe(写入流)
})
这在pg promise中是否可行


此时,
返回的响应。行
包含数组[{}]中的所有数据,因此上述示例不起作用,因此唯一的解决方案可能需要分别插入和选择,但是如果我可以简单地获取返回的数据,那就太好了。

不确定为什么我没有想到这一点,但解决方案只是使用
pg query stream


设qs=新查询流(`
插入表1
从表2中选择*
返回*;`)
const write_stream=fs.createWriteStream('file.csv');
const{parse}=require('json2csv');
const stream=client.query(qs)
让字段=[];
流动
.on('data',data=>{
//写入csv标题
如果(!fields.length){
字段=对象。键(数据)
write_stream.write(fields.join(',')+'\r\n')
}
试一试{
//写入csv数据
const csv=parse(数据,{header:false})
写入\u流。写入(csv+'\r\n')
}捕捉(错误){
stream.close()
}
})
.on('结束',(结束)=>{
写入_stream.end()
})
.on('错误',(错误)=>{
控制台错误(错误)
})

发布正确答案,因为问题作者选择不遵循

以下是如何将查询结果正确地流式传输到csv文件(来自的作者):


请参阅方法。

。如果我(5天前)给你的答案对你有效,请接受,否则如果有任何问题,请发表评论。(如果
pgpromise
,我就是作者)不执行任何查询的流使用并不能真正回答您自己的问题。但是,提供的链接为您提供了如何正确操作的想法。谢谢,更新的答案为什么要从链接中重新发明方法?提供的代码示例是正确的方法,而且更简单。您提供的示例在许多方面都不好:1)它不适用于提供一般事件和处理的
pg promise
流媒体系统;2) 手动处理JSON流格式,效率很低,而且可以自动完成(请参见我的答案)。3)解决方案通常过于复杂,因此容易出错。
import QueryStream from 'pg-query-stream';
import CsvWriter from 'csv-write-stream';
import {createWriteStream} from 'fs';

const csv = new CsvWriter();
const file = createWriteStream('out.csv');

const qs = new QueryStream('select * from my_table');

await db.stream(qs, s => {
    s.pipe(csv).pipe(file);
});
//=> resolves with: {processed, duration}