Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL drop table命令未减少数据库大小_Sql_Postgresql_Postgresql 9.1_Postgresql 9.2_Postgresql 8.4 - Fatal编程技术网

PostgreSQL drop table命令未减少数据库大小

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+”命令所示)几乎是即时反映出来的,不需要真空或检查点。真空(或真空满)在这种情况下几乎没

我从我的Postgres数据库中删除了几个表。但是,在删除表之前,数据库的大小为6586kB,而在删除表之后,数据库的表大小保持不变。我认为应该缩小尺寸

我需要做什么才能得到实际尺寸


我知道真空命令。我需要用这个吗?怎么做

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));