Postgresql psql似乎因长查询而超时

Postgresql psql似乎因长查询而超时,postgresql,postgresql-9.2,psql,Postgresql,Postgresql 9.2,Psql,我正在用大约80GB的数据向postgres进行批量复制 \copy my_table FROM '/path/csv_file.csv' csv DELIMITER ',' 在提交事务之前,我得到以下错误 服务器意外地关闭了连接 这可能意味着服务器异常终止 在处理请求之前或期间 在PostgreSQL日志中: LOG:server process (PID 21122) was terminated by signal 9: Killed LOG:terminating any other

我正在用大约80GB的数据向postgres进行批量复制

\copy my_table FROM '/path/csv_file.csv' csv DELIMITER ','
在提交事务之前,我得到以下错误

服务器意外地关闭了连接 这可能意味着服务器异常终止 在处理请求之前或期间

在PostgreSQL日志中:

LOG:server process (PID 21122) was terminated by signal 9: Killed
LOG:terminating any other active server processes
WARNING:terminating connection because of crash of another server process
DETAIL:The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
HINT: In a moment you should be able to reconnect to the database and repeat your command. 

后端进程接收到信号9(
SIGKILL
)。如果:

  • 有人手动发送一个
    kill-9
  • cron作业设置为在某些情况下发送
    kill-9
    (非常不安全,不要这样做);或
  • Linux内存不足(OOM)杀手触发并终止进程
在后一种情况下,您将在内核的
dmesg
输出中看到OOM killer活动的报告。我想这就是你在你的案例中看到的

PostgreSQL服务器的配置应避免虚拟内存过度使用,以便OOM killer不会运行,并且PostgreSQL可以自行处理内存不足的情况。看


另一个问题是“为什么这会占用这么多内存”仍然存在。回答这个问题需要更多地了解您的设置:服务器有多少RAM,有多少是免费的,您的
工作记忆
维护工作记忆
设置是什么,等等。在升级到当前的PostgreSQL 8.4修补程序版本以确保问题不是已经解决的问题之前,这不是一个非常有趣的问题。

副本是在本地主机上运行还是通过远程连接运行?我想说你亲眼目睹了后端崩溃。有关详细信息,请查看PostgreSQL错误日志。如果您有非常高的
工作记忆
维护工作记忆
可能是内存不足?或者,您的磁盘空间不足——尽管这通常会产生更好的错误。另外,PostgreSQL的确切版本是什么?版本是8.4.11。我在远程机器上运行它。我已经进入了框,但我使用的是“屏幕”。我在日志中看到这一点:“考虑增加配置参数”检查点“子段”,“只是为了澄清,<代码> PSQL在与数据库相同的机器上运行吗?它对您是否远程并不重要,只要它对
psql
客户端是否远程;如果您正在使用
psql
localhost
上的数据库通信,则不会出现网络问题;搜索
FATAL
PANIC
级别的消息。日志:服务器进程(PID 21122)被信号9终止:终止日志:终止任何其他活动服务器进程警告:由于另一个服务器进程崩溃而终止连接详细信息:邮局主管已命令此服务器进程回滚当前事务并退出,beca use Other server进程异常退出,共享内存可能已损坏。提示:过一会儿你就可以重新连接到数据库并重复你的命令了。升级到postgres 9.1成功了,看起来像是8.4版本的问题。再次感谢Craig的帮助。@MattE或旧的8.4补丁发布问题。一般来说,你应该努力跟上补丁的进度,例如应该真正运行8.4.17而不是8.4.11。这对于安全性、性能、可靠性等非常重要。