PostgreSQL drop table命令未减少数据库大小
我从我的Postgres数据库中删除了几个表。但是,在删除表之前,数据库的大小为6586kB,而在删除表之后,数据库的表大小保持不变。我认为应该缩小尺寸 我需要做什么才能得到实际尺寸PostgreSQL drop table命令未减少数据库大小,sql,postgresql,postgresql-9.1,postgresql-9.2,postgresql-8.4,Sql,Postgresql,Postgresql 9.1,Postgresql 9.2,Postgresql 8.4,我从我的Postgres数据库中删除了几个表。但是,在删除表之前,数据库的大小为6586kB,而在删除表之后,数据库的表大小保持不变。我认为应该缩小尺寸 我需要做什么才能得到实际尺寸 我知道真空命令。我需要用这个吗?怎么做 6586KB大约是一个“空”(新创建)数据库的大小。如果您丢弃的表非常小或是空的,丢弃它们不会使大小减少很多(如果有的话) 当我删除一个填充的大表时,数据库大小的减少(如psql的“\l+”命令所示)几乎是即时反映出来的,不需要真空或检查点。真空(或真空满)在这种情况下几乎没
我知道真空命令。我需要用这个吗?怎么做 6586KB大约是一个“空”(新创建)数据库的大小。如果您丢弃的表非常小或是空的,丢弃它们不会使大小减少很多(如果有的话) 当我删除一个填充的大表时,数据库大小的减少(如psql的“\l+”命令所示)几乎是即时反映出来的,不需要真空或检查点。
真空(或真空满
)在这种情况下几乎没有用处,因为它只从表内回收空间
嗯,目录表中有一些条目在删除表后会留下死元组。因此,在创建并再次删除表之后,数据库可以占用稍多的空间
要使数据库再次降至最小大小,请运行客户端工具:
在Postgres 9.0或更高版本上,这也会重写预应力条件下的索引。Postgres Wiki中的详细信息:
这就是Postgres测量db大小的方式:使用专用:
使用truncate,首先了解有关MVCC的警告
TRUNCATE快速删除一组表中的所有行。它与对每个表执行非限定删除的效果相同,但由于它实际上不扫描表,因此速度更快。此外,它可以立即回收磁盘空间,而不需要后续的真空操作。这在大桌子上最有用
所有标签都是什么?您的实际版本是什么?请把标签修好。你怎么测量尺寸?请提供更多细节。我通过选择pg_size_pretty(pg_database_size(databaseName))来测量大小;command6586kB不是空的数据库大小。空数据库大小为6562kB。我需要知道数据的增长情况。这就是为什么我在删除表后需要原始大小。确切的大小取决于编译时使用的选项、硬件等。34kb真的需要担心吗?这是一个舍入误差。如果你想弄清楚发生了什么,就用一张足够大的桌子。如果你试图以尽可能小的数据量为基础进行学习,你会发现你的知识并不适用于现实。
vacuumdb -f mydb
SELECT pg_size_pretty(pg_database_size(mydb));