在 postgresql 中处理磁盘空间已满

Has*_*aig 17 postgresql postgresql-9.3

我有一个带有 postgresql 9.3.10 后端的 Django Web 应用程序(位于 Linux 操作系统中)。我遇到了磁盘已满错误,因此即使我尝试截断表,我也会收到以下错误:

ERROR:  could not extend file "base/30137/33186048": No space left on device
HINT:  Check free disk space.
Run Code Online (Sandbox Code Playgroud)

我无法轻松地向服务器添加更多磁盘空间,也无法删除此 VM 上的内容。但是,有几个表是截断的候选表,但似乎我现在也无法截断它们。

谁能给我建议我可以在这里做什么?这严重影响了我的生产服务器,我在这里有点意外的 DBA,所以完全被难住了。

Cra*_*ger 12

由于 PostgreSQL 在对表进行任何更改之前必须编写 WAL,因此它需要可用磁盘空间才能删除内容并释放更多磁盘空间。

如果让磁盘填满,则无法从 PostgreSQL 中恢复。即使TRUNCATE仍然必须写信给 WAL。

因此,您必须在卷上释放一些空间,或扩展卷。如果您的 PostgreSQL 日志文件在pg_log数据目录中,您可以安全地删除其中的一些并重新启动 Pg。

不要删除pg_xlogpg_clog。这些不是服务器错误日志,它们是数据库、事务日志和提交日志的关键部分。