【发布时间】: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 行,那么命令会成功。我猜某处有超时导致使用完整数据集的查询失败。不过,我找不到任何超时设置或参数。
如何使完整数据集的批量插入成功?
【问题讨论】:
-
这几乎就是我正在做的事情,而且它正在为完整的数据集超时
-
类似,但不完全相同。当我阅读您正在使用的语句时,它基本上创建了一个巨大的字符串,然后连接到 SQL,然后它尝试将整个字符串作为参数提供。如果您加载 psql 并运行
\copy ... from '/path/to/data.csv' ...之类的东西,我想当文件的内容逐块流式传输时,连接可能会保持活动状态。不将此作为答案,因为这是一个疯狂的猜测,但这将是我对为什么 10M 行有效(= 参数在连接超时之前完全推送)而不是整个文件(= 仍在上传的参数)的预感。 -
哦,我忽略了这一点。你是绝对正确的。文档在这里postgresql.org/docs/9.2/static/…。那确实解决了问题!想把它写成答案并获得积分吗?
-
作为答案发布。
标签: postgresql amazon-rds psql