我从Postgres数据库中删除了几张表。但是,在删除表之前,数据库的大小为6586kB,并且在删除数据库的表大小之后保持不变。我认为应该减少尺寸。
要获得实际尺寸,我需要做什么?
我知道VACUUM命令。我需要使用它吗?如何?
答案 0 :(得分:4)
VACUUM
(或VACUUM FULL
)几乎没用,因为它只从表中的中回收空间。
好吧,目录表中的条目会在删除表后留下死元组。因此,在创建表并再次删除表之后,数据库可以占用更多的空间。
要再次将数据库降至最小,请运行客户端工具vacuumdb
with the --full
option:
vacuumdb -f mydb
在Postgres 9.0或更高版本上,这也会在prestine条件下重写索引。 Postgres Wiki中的详细信息: http://wiki.postgresql.org/wiki/VACUUM_FULL
这就是Postgres测量db大小的方式:使用专用的object size functions:
SELECT pg_size_pretty(pg_database_size(mydb));
答案 1 :(得分:3)
使用truncate,首先了解有关MVCC的警告
TRUNCATE会快速删除一组表中的所有行。它与每个表上的非限定DELETE具有相同的效果,但由于它实际上不扫描表,因此速度更快。此外,它立即回收磁盘空间,而不是需要后续的VACUUM操作。这对大型表格最有用。
答案 2 :(得分:1)
6586KB大约是“空”(新创建的)数据库的大小。如果您丢弃的表格非常小或为空,那么丢弃它们不会减小大小(如果有的话)。
当我删除一个填充的大表时,数据库大小的减少(如psql的“\ l +”命令所示)会立即反映出来,不需要真空或检查点。