数据库是docker中的PostgreSQL9.5.1。我的主机有3.75GB内存,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详细信息:邮局管理员命令此服务器进程回滚当前事务并退出,因为另一个服务器进程异常退出,并且可能损坏共享内存。 docker@test_db提示:稍后您应该能够重新连接到数据库并重复您的命令。 docker@test_db警告:由于另一个服务器进程崩溃而终止连接 docker@test_db详细信息:邮局管理员命令此服务器进程回滚当前事务并退出,因为另一个服务器进程异常退出,并且可能损坏共享内存。 ..。docker@test_db致命:数据库系统处于恢复模式 日志:终止所有服务器进程;重新初始化 日志:数据库系统被中断;最后一次知道时间为2017-06-06 :39:40 日志:数据库系统没有正确关闭;自动恢复正在进行中 docker@test_db致命:数据库系统处于恢复模式 docker@test_db致命:数据库系统处于恢复模式 docker@test_db致命:数据库系统处于恢复模式 日志:启动自动真空发射器
脚本给出了日志:
内部异常 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()发布于 2017-06-09 05:29:43
这就是我所做的。实际上我的记忆已经足够丰富了。这就是为什么linux操作系统过去在Postgresql中杀死进程的原因。每个插入进程中都有1M个值。诀窍是我把数据列表分成几个块,然后用100 K乘100 K进行测试。效果很好。谢谢你的帮助。
https://stackoverflow.com/questions/44387365
复制相似问题