使用 Pg-Promise 从 JSON 文件大量插入
Massive Insert from a JSON file using Pg-Promise
使用 Pg-Promise 助手和 fs 流加载巨大的 JSON 文件。
我正在使用 pg-promise,我想使用 pgp.helpers 在 table 中进行大量插入。我已经看到像 Multi-row insert with pg-promise 这样的解决方案,也遵循了流数据导入 (Spex) 但它仍然失败并出现与此相同的错误 post https://github.com/vitaly-t/spex/issues/8
我尝试在 CSV 流 (rs.csv()) 上使用另一个 post 的示例,但是当我用 JSonStream 解析器替换相同的示例时,我仍然遇到相同的错误。
能否分享一个工作示例?
db.tx(t => {
return streamRead.call(t, stream.pipe(parser), receiver)
})
可能有更好的方法,但下面的代码确实有效!
我有每个插入语句 20,000 个块(row.length),您可以根据需要进行相应调整。
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()
}
})
如果这有助于或任何其他改进流程的方法,请在评论中告诉我。
使用 Pg-Promise 助手和 fs 流加载巨大的 JSON 文件。
我正在使用 pg-promise,我想使用 pgp.helpers 在 table 中进行大量插入。我已经看到像 Multi-row insert with pg-promise 这样的解决方案,也遵循了流数据导入 (Spex) 但它仍然失败并出现与此相同的错误 post https://github.com/vitaly-t/spex/issues/8
我尝试在 CSV 流 (rs.csv()) 上使用另一个 post 的示例,但是当我用 JSonStream 解析器替换相同的示例时,我仍然遇到相同的错误。
能否分享一个工作示例?
db.tx(t => {
return streamRead.call(t, stream.pipe(parser), receiver)
})
可能有更好的方法,但下面的代码确实有效! 我有每个插入语句 20,000 个块(row.length),您可以根据需要进行相应调整。
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()
}
})
如果这有助于或任何其他改进流程的方法,请在评论中告诉我。