首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL -空表

PostgreSQL -空表
EN

Stack Overflow用户
提问于 2015-07-15 02:03:50
回答 2查看 13.4K关注 0票数 13

我的PostgreSQL DB模式上有一个名为EVENTS的表。

它是空的,即当我执行

代码语言:javascript
复制
SELECT * FROM EVENTS

我得到一个空的结果集。

尽管如此,该表还是占用了5MB的磁盘空间。

我在执行

代码语言:javascript
复制
SELECT round(pg_total_relation_size('events') / 1024.0 / 1024.0, 2)

我得到了5.13MB的内存。

我试图显式地运行VACUUM,但它没有改变任何事情。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-15 02:57:00

截断表:

代码语言:javascript
复制
truncate events;

来自the documentation:

TRUNCATE可快速删除一组表中的所有行。它与对每个表的非限定DELETE具有相同的效果,但由于它实际上不扫描表,因此速度更快。此外,它可以立即回收磁盘空间,而不需要后续的真空操作。这在大表上最有用。

如果希望立即回收磁盘空间,并保留非空表的现有行,则可以使用vacuum:

代码语言:javascript
复制
vacuum full events;

这将以独占方式锁定表并重写它(实际上,会创建一个新副本并删除旧副本)。这是一个开销很大的操作,通常不推荐在较大的表上执行。

在RDBMS中,磁盘空间的一些冗余使用是一种正常状态。如果您有一个正确配置的autovacuum daemon,则在插入新行时将使用未使用的空间。

票数 26
EN

Stack Overflow用户

发布于 2015-07-16 07:54:02

如果您的表中有死行或膨胀,VACUUM实际上不会回收其内存,而是使其可重用,这将在您下次向表中插入数据时使用。

要回收使用的内存,请尝试

真空满事件;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31414050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档