node / postgres - 从STDIN结果复制不完整。没有异常被抛出

时间:2017-10-23 15:35:11

标签: node.js mongodb postgresql postgresql-copy

我使用node-pg-copy将数据从mongodb批量导入postgresql db

我使用observable来映射来自mongodb的数据,然后将其写入copyFrom正在使用的流中。有点像:

function writeToStream (source, stream) {

  const trigger = Rx.Observable.fromEvent(stream, 'drain')
  hotsource = source.publish()

  const sub = trigger
    .takeUntil(hotSource.last())
    .subscribe(
      data => stream.write(String(data)) && pauser.next(true), // pauser gets the next row to deal with concurrency. Using debugger, I can see that 'data' is ok every time.
      err => stream.emit('error', err),
      () => !stream._isStdio && stream.end()
    )

  sub.add(hotsource.connect())
}

const textSource = Rx.Observable.from(docs)
  .map(doc => toTextFormat(doc)) // using debugger tools, I can see that every document passes through this method, and returns ok.

const copyStream = pgClient.query(copyFrom(
  `COPY "${table}" (${columnNames.join(', ')}) FROM STDIN`
))


const subscription = writeToStream(textSource, copyStream)

使用调试工具,我可以看到每个文档都已正确映射并写入流中。

脚本运行没有问题,并且完成时不会抛出任何异常。从来没有,当我检查postgres db的结果时,行数少于预期。 任何人都知道为什么会这样?

注意:脚本将几个mongo集合导入postgres表,但只有两个有此问题。此外,这两个集合中的行数始终相同。

注意II:此代码是简化版。原始脚本处理并发性和其他潜在问题,我认为这与此问题无关。

**编辑:**我已配置postgres将日志保存到文件中。文件中的日志也不会显示任何错误。

0 个答案:

没有答案