使用Pg-Promise从JSON文件进行大量插入



使用 Pg-Promise 助手和 fs 流加载巨大的 JSON 文件。

我正在使用 pg-promise,我想使用 pgp.helpers 在表中进行大量插入。我已经看到了像带有 pg-promise 的多行插入这样的解决方案,并且还遵循了流的数据导入 (Spex(,但它仍然失败并出现与这篇文章相同的错误 https://github.com/vitaly-t/spex/issues/8

我尝试使用CSV流(rs.csv(((上另一篇文章中的示例,但是当我用JSonStream解析器替换相同的内容时,我仍然收到相同的错误。

你能分享一个工作的例子吗?

db.tx(t => { return streamRead.call(t, stream.pipe(parser), receiver) })

可能有更好的方法可以做到这一点,但下面的代码肯定有效! 我每个插入语句的块(row.length(为 20,000,您可以根据需要进行相应的调整。

stream.pipe(parser)
parser.on('data', data =>{
row.push(data)
if (row.length === 20000) { 
parser.pause()
//console.log(row.length)
db.tx('inserting-products', t => {
const insert = pgp.helpers.insert(row, cs)
t.none(insert).then(() => {
row =[]
parser.resume()
})
})
}
})
parser.on('end', () =>{
//console.log(row.length)
if(row.length != 0){
db.tx('inserting-products', t => {
const insert = pgp.helpers.insert(row, cs)
t.none(insert).then(() => {
console.log('success')
db.$pool.end()
})
})
}
if(row.length === 0) {
console.log('success')
db.$pool.end()
}
})

请在评论中告诉我这是否有帮助或任何其他改进流程的方法。

最新更新