0

这就是我在 Node 中查询数据的方式:

const {Pool} = require('pg');
const QueryStream = require('pg-query-stream');
const CSVStream = require('../path/to/CSVStream');
const pool = new Pool({
    host: "localhost",
    port: 5432,
    user: "blah",
    password: "blah",
    database: "prenoms",
});
pool.connect((err, client, done) => {
    if (err) {
        throw err;
    }
    const query = new QueryStream('select * from public.prenoms_dep;');
    const stream = client.query(query);
    stream.on('end', done);
    stream.pipe(CSVStream.stringify()).pipe(res);
});

我的 CSVStream 如下所示:

var through = require('through');
exports.stringify = function (op, sep, cl) {
    op = ''
    sep = '\n'
    cl = ''

    var stream
        , first = true
        , anyData = false
    stream = through(function (data) {
            anyData = true
            try {
                var strTemp = "";
                for (let val of Object.values(data)) {
                    strTemp = strTemp + val.toString() + ",";
                }
                strTemp = strTemp.slice(0, -1);
            } catch (err) {
                return stream.emit('error', err)
            }
            if (first) {
                first = false;
                var headers = "";
                for (let val of Object.keys(data)) {
                    headers = headers + val.toString() + ",";
                }
                headers = headers.slice(0,-1);
                stream.queue(op + headers + sep + strTemp)
            } else stream.queue(sep + strTemp)
        },
        function (data) {
            if (!anyData)
                stream.queue(op)
            stream.queue(cl)
            stream.queue(null)
        })
    return stream
}

当我在 pgAdmin 中运行它时,SQL 查询需要大约 10 秒才能运行。通过节点时,至少需要3倍的时间。

我将如何隔离我在代码中浪费时间的地方?

如何确保它花费的时间与 pgAdmin 大致相同?

4

0 回答 0