【问题标题】:Postgres copy query connection lost errorPostgres 复制查询连接丢失错误
【发布时间】:2014-11-29 05:34:16
【问题描述】:

我正在尝试使用以下命令将大约 2 亿行 (3.5GB) 的数据批量加载到 Amazon RDS postgresql 数据库中:

cat data.csv | psql -h<host>.rds.amazonaws.com -U<user> <db> -c "COPY table FROM STDIN  DELIMITER AS ','"

几分钟后我收到此错误:

connection not open
connection to server was lost

如果我运行 head -n 100000000 data.csv 来发送前 100M 行而不是所有 200M 行,那么命令会成功。我猜某处有超时导致使用完整数据集的查询失败。不过,我找不到任何超时设置或参数。

如何使完整数据集的批量插入成功?

【问题讨论】:

  • 试过这些方法吗? stackoverflow.com/questions/3602976/…
  • 这几乎就是我正在做的事情,而且它正在为完整的数据集超时
  • 类似,但不完全相同。当我阅读您正在使用的语句时,它基本上创建了一个巨大的字符串,然后连接到 SQL,然后它尝试将整个字符串作为参数提供。如果您加载 psql 并运行\copy ... from '/path/to/data.csv' ... 之类的东西,我想当文件的内容逐块流式传输时,连接可能会保持活动状态。不将此作为答案,因为这是一个疯狂的猜测,但这将是我对为什么 10M 行有效(= 参数在连接超时之前完全推送)而不是整个文件(= 仍在上传的参数)的预感。
  • 哦,我忽略了这一点。你是绝对正确的。文档在这里postgresql.org/docs/9.2/static/…。那确实解决了问题!想把它写成答案并获得积分吗?
  • 作为答案发布。

标签: postgresql amazon-rds psql


【解决方案1】:

当我阅读您正在使用的语句时,它基本上创建了一个巨大的字符串,然后连接到 SQL,然后它尝试将整个字符串作为参数提供。

如果您加载 psql 并运行类似\copy ... from '/path/to/data.csv' ...,我想当文件的内容逐块流式传输时,连接可能会保持活动状态。

这就是我对为什么 10M 行有效(= 参数在连接超时之前完全推送)而不是整个文件(= 参数仍在上传)的预感。

【讨论】:

  • 是的,使用 \copy psql 命令而不是 COPY 语句修复了超时问题。谢谢!
猜你喜欢
  • 2013-05-10
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多