无法从pg_dump导入新数据库,内存不足。 psql cloned_db< db_backup.sql

时间:2017-02-17 01:31:07

标签: database postgresql

通过以下

备份远程数据库
pg_dump dbname | gzip > filename.gz

创建了一个新数据库,我想将其导入

CREATE DATABASE new_clone;

尝试通过以下命令导入新数据库:

gunzip -c /path/to/backup/filename.sql.gz | psql new_clone

工作,导入数据库部分,但遇到错误

out of memory

没有其他信息...大多数表格和模式已经出现,但我无法解决这个问题。

我试过做一个简单的

pg_dump dbname > filename

psql dbname < infile

尝试没有压缩,也失败了。 我的猜测是数据库中的blob太大了?有没有办法跳过导致错误的blob?

数据库大小为10GB未压缩,2.2GB压缩。我有135GB的可用磁盘空间和32GB内存。运行ubuntu 14.04,postgres v 9.6.2

感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:2)

我有同样的问题。经过一番挖掘,我发现这不是psql问题,但是sdin:在将COPY ... FROM stdin更改为COPY ... from '/path/to/file/with.dump'后,一切都变好了。所以当你通过stdin,恕我直言,操作系统,而不是psql尝试提供psql时,尝试将所有转储加载到内存中,并且,比转储更大,比内存进程可以有,你得到错误。

PS我很抱歉我的英语不好,这不是我的母语。

答案 1 :(得分:0)

为了提高 k.o.回答,psql --no-readline 可用于避免 stdin(readline) OOM 问题。

答案 2 :(得分:0)

我最近遇到了同样的问题。我正在使用 ubuntu 20.04 并且 postgres 版本是 12。您应该尝试阅读错误的第一行。主要错误写在第一行。就我而言,缺少 postgis 脚本。结果,我收到了 OOM 错误。要修复它,请运行:

sudo apt-get install postgis postgresql-12-postgis-scripts