结束loaddata

4 投票
2 回答
2421 浏览
提问于 2025-04-18 03:24

我使用的是PostgreSQL 9.1和Django 1.6.2。

CREATE DATABASE db WITH ENCODING = 'UTF8' TEMPLATE template0;
CREATE USER db_user WITH password 'password';
GRANT ALL privileges ON DATABASE db TO db_user;

然后我想加载一个数据文件:

python manage.py loaddata cars
Killed

这是什么意思呢?被杀死? 在mysql里一切都运行得很好。Cars.yaml是一个非常大的文件(里面有俄语单词,我需要创建一个LC_COLLATE = 'ru_RU.UTF-8'的数据库吗?)。

在mysql中我使用:

CREATE DATABASE `db` CHARACTER SET utf8 COLLATE utf8_general_ci;

一切都运行得很好。请帮帮我,我在PostgreSQL方面还是个新手。

如何解决这个killed的问题呢?

2 个回答

0

在终端中使用 pg_restore()

对于大文件,使用 django loaddata 可能会被操作系统杀掉。一个解决办法是把你的数据库数据先导出到一个归档文件,然后再直接加载到 PostgreSQL 数据库中。所以如果你的导出文件叫 dump.gz,你可以在终端中使用以下命令将它加载到数据库:

gunzip dump.gz
pg_restore -d your_db -U user_name --no-owner dump
5

Killed 是一个信息,它是由 Unix 的命令行界面显示的,而不是由 python 程序本身显示的。

这个信息意味着程序结束时出现了错误代码,表示它被 SIGKILL 信号终止了(这个信号也可以用 kill -9 命令发送)。

这可能是 Linux 的 OOM 杀手 干的,如果 python 程序(或者其他同时运行的程序)占用了大量内存的话(可以参考 当 OOM 杀手终止一个进程时的返回代码)。

你可以查看你的内核日志来确认这个问题(通常在 /var/log/kernel.log 或类似的地方)。如果确实是内存使用过多的问题,增加系统的交换空间可能会解决这个问题。

或者,如果可能的话,改进脚本以减少内存使用。

数据库的创建方式和它的区域设置之间没有明显的联系。

撰写回答