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/ 上安装了自己的分区,并且空闲字节为零。

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

4

3 回答 3

9

pg_log 可以被清除,它是用于管理员的常规日志 不要删除pg_xlogorpg_clog目录,因为它们是用于数据库内部的(像对待数据库中的数据文件一样对待它们)。即使您有空间,删除它们也会导致重新启动问题。

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

在树下找到一个/var/lib/pgsql很大的目录,但不要大到不能复制到另一个文件系统。它不必是整个base目录等,它可以是那里的子目录。

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

删除旧目录,然后在旧目录所在的位置创建一个符号链接到新位置。

启动数据库和VACUUM FULL(或者现在您可以访问,或者如果您有一个可以不用的数据库,您可以删除一个数据库)。

关闭数据库。

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

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

于 2012-02-03T13:32:46.900 回答
3

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

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

==编辑==

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

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

于 2012-02-03T11:09:01.960 回答
2

您必须将数据文件移动到另一个分区,然后启动服务器,然后进行清理,然后将文件移回。简单的。

于 2012-02-03T10:59:11.667 回答