使用 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()
    }
  })

如果这有助于或任何其他改进流程的方法,请在评论中告诉我。