PG 8.3,磁盘已满,服务器无法启动

时间:2012-02-03 10:53:51

标签: postgresql postgresql-8.4

这个问题涉及Postgresql 8.3。我还不能创建标签,因此我将版本8.4作为标签。

这是一个测试服务器,但我无法连接到它,因为经过几天的密集使用后,Postgres所在的磁盘已满。我不知道RDBMS无法启动,我无法做真空。

重新启动时,系统会说,

Starting PostgreSQL 8.3 database server: mainThe PostgreSQL server failed to sta
rt. Please check the log output: FATAL: could not write lock file "postmaster.pi
d": No space left on device failed!
 failed!

Linux工作正常,并且有足够的可用磁盘空间。 Postgresql在/ var / lib /上安装了自己的分区,并且没有空闲字节。

我想我应该在重新启动数据库服务器之前释放一些空间,但我不知道要删除哪些文件。日志文件不在同一个分区上,因此无法清除它们。有人可以帮我吗?

3 个答案:

答案 0 :(得分:8)

pg_log可以被清除,它适用于管理员的常规日志 不要删除pg_xlogpg_clog目录,因为它们适用于数据库内部(将它们视为基础中的数据文件)。即使您有空间,删除它们也可能导致重新启动问题。

我尝试的过程(在备份之后)是:

/var/lib/pgsql树下查找一个非常大的目录,但不要太大,以至于无法复制到另一个文件系统。它不一定是整个base目录等,它可以是那里的子目录。

将该目录(包括所有子目录)的内容复制到另一个文件系统。

删除旧目录,然后创建一个符号链接,其中旧目录位于新位置。

启动数据库和VACUUM FULL(或者现在你可以访问,或者如果你有一个没有数据库就可以删除数据库。)

关闭数据库。

删除符号链接,然后再次将文件移回var / lib文件系统。

你无法进行文件系统备份这一事实会让我有点不愿意在你的环境中做到这一点。

答案 1 :(得分:3)

删除位于/ pg_log中的日志文件以清理一些内容并开始使用。

VACUUM不会回收磁盘空间,您需要VACUUM FULL。您也可以删除一些您现在不需要的索引或其他内容,只是为了回收空间。

==编辑==

将pg_ident.conf复制到另一个磁盘或删除所有注释以仅占用一点空间。在制作副本后,你也可以清理postgresql.conf。

之后,在single user mode中启动PostgreSQL(使用--single)并连接到要清理的数据库。清理完毕后,停止PostgreSQL并以正常模式重新启动。

答案 2 :(得分:2)

您必须将数据文件移动到另一个分区,然后启动服务器,然后清空,然后将文件移回。容易。