postgreSQL真空临时文件?

jor*_*gen 0 postgresql diskspace vacuum

我有一个“小”问题。一周前,我的数据库已达到完整的磁盘容量。我删除了不同表中的许多行,以释放磁盘空间。至极后,我尝试运行完全真空至极并没有完成。

我想知道的是。当我停止完全压缩真空时,它是否在磁盘上留下了必须手动删除的任何临时文件?我现在有一个100%磁盘容量的数据库,不用说这是一个大问题。

有释放磁盘空间的提示吗?

我正在使用Postgres 8.1.4数据库运行SUSE。

小智 5

首先:

升级

即使您无法升级到8.2、8.3或8.4,至少也要升级到最新的8.1(目前为8.1.17,但在1-2天内将为8.1.18)。

第二:诊断出什么问题。

使用du工具来诊断空间的确切位置。哪个目录占用太多空间?

使用df检查总使用空间,然后检查其中有多少是PostgreSQL目录。

最好的选择是:

cd YOUR_PGDATA_DIR
du -sk *
cd base
du -sk *
cd LARGEST DIR FROM PREVIOUS COMMAND
du -sk * | sort -nr | head
Run Code Online (Sandbox Code Playgroud)

现在,您知道PGDATA中的哪个目录正在使用空间,您可以对其进行处理。

如果是日志或pg_temp-重新启动pg或删除日志(pg_clog和pg_xlog不是该单词的通用含义的日志,切勿从此处删除任何内容!)。

如果它在您的基本目录中,则:

基本目录中的数字目录与数据库有关。您可以使用以下方法进行检查:

select oid, datname from pg_database;
Run Code Online (Sandbox Code Playgroud)

当您知道正在使用大部分空间的数据库时,请连接到该数据库,然后检查哪些文件正在使用大部分空间。

文件名将为数字,并带有可选的“ .digits”后缀-该后缀(目前)无关紧要,您可以通过发出以下命令检查文件的确切含义:

select relname from pg_class  where relfilenode = <NUMBER_FROM_FILE_NAME>;
Run Code Online (Sandbox Code Playgroud)

一旦知道哪些表/索引使用了大部分空间,就可以对其进行VACUUM FULL,或对其执行CLUSTER命令(更好)。