首页 > 解决方案 > 从插入流“返回”用于 pg-promise

问题描述

这里的目标是将RETURNING数据流式传输INSERT INTO ....到写入流。

IE。

                const write_stream = fs.createWriteStream('file.csv')
                client.query(`
                    INSERT INTO table1  (columns) 
                        SELECT ...
                        FROM table2
                        RETURNING *
                    `)
                    .then(returned => {
                        returned.rows.pipe(write_stream)                      
                    })

这可能pg-promise吗?

目前,来自的响应returned.rows包含数组 [{}] 中的所有数据,因此上面的示例不起作用,因此唯一的解决方案可能需要分别插入和选择,但如果我可以简单地获得返回的结果会很棒数据。

标签: node.jsstreampg-promise

解决方案


发布正确答案,因为问题作者选择不遵循提供的示例

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

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}

请参阅方法。


推荐阅读