当使用python psycopg2插入行时,docker postgres进程终止

数据库是docker中的postgresql-9.5.1。 我的主机有3.75 GB的内存,Linux。 在一些方法中,我使用psycopg2和下面的代码一个接一个地插入490000行。

student_list = [(name, surname, explanation)] args_str = ','.join(cur.mogrify("(%s,%s,%s)", x) for x in student_list) cur.execute('INSERT INTO students (name, surname, explanation) VALUES ' + args_str) 

这使得我的数据库泊坞窗内存似乎已满,并给出了这些错误:

日志:服务器进程(PID 11219)由信号9:终止
详细信息:失败的进程正在运行
日志:终止任何其他活动的服务器进程
docker @ test_db警告:由于另一个服务器进程崩溃而终止连接
docker @ test_db详细信息:postmaster命令此服务器进程回滚当前事务并退出,因为另一个服务器进程exception退出并可能损坏共享内存。
docker @ test_db提示:一会儿你应该可以重新连接到数据库并重复你的命令。
docker @ test_db警告:由于另一个服务器进程崩溃而终止连接
docker @ test_db详细信息:postmaster命令此服务器进程回滚当前事务并退出,因为另一个服务器进程exception退出并可能损坏共享内存。
… docker @ test_db FATAL:数据库系统处于恢复模式
日志:所有服务器进程终止; 重新初始化
日志:数据库系统中断; 最后在2017-06-06 09:39:40 UTC得知
日志:数据库系统没有正确closures; 自动恢复正在进行中
docker @ test_db FATAL:数据库系统处于恢复模式
docker @ test_db FATAL:数据库系统处于恢复模式
docker @ test_db FATAL:数据库系统处于恢复模式
日志:自动清理启动器

脚本给出了这个日志:

内部例外
SSL SYSCALL错误:检测到EOF

我尝试在连续的查询之间放置一些睡眠时间,但得到相同的结果 这有什么限制吗? 此外,我试图连接和断开每个查询,但得到相同的结果。 这些是我的连接和断开方法。

 def connect(): conn = psycopg2.connect(database=database_name, user=database_user, host=database_host, port=database_port) conn .set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) cur = conn.cursor() return conn, cur def disconnect(conn, cur): cur.close() conn.close() 

这是我做的。 其实我的记忆足够了 这就是为什么Linux操作系统用来杀死Postgresql中的进程的原因。 每个插入过程中有1M个值。 诀窍是我把数据列表分成了大块,并尝试了10万到100K。 这工作得很好。 感谢您的帮助。