这就是我在 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 大致相同?