我的PostgreSQL数据库架构上有一个名为EVENTS的表.
它是空的,即我执行时
SELECT * FROM EVENTS
Run Code Online (Sandbox Code Playgroud)
我得到一个空的结果集.
尽管如此,该表占用了5MB的磁盘空间.
我正在执行
SELECT round(pg_total_relation_size('events') / 1024.0 / 1024.0, 2)
Run Code Online (Sandbox Code Playgroud)
我得到了5.13MB.
我试图明确地运行VACUUM,但它没有改变任何东西.
有任何想法吗?
kli*_*lin 15
截断表格:
truncate events;
Run Code Online (Sandbox Code Playgroud)
从文档:
TRUNCATE快速删除一组表中的所有行.它与每个表上的非限定DELETE具有相同的效果,但由于它实际上不扫描表,因此速度更快.此外,它立即回收磁盘空间,而不是需要后续的VACUUM操作.这对大型表最有用.
如果要立即回收磁盘空间以保留非空表的现有行,可以使用vacuum:
vacuum full events;
Run Code Online (Sandbox Code Playgroud)
这将专门锁定表并重写它(实际上,创建一个新副本并删除旧副本).这是一项昂贵的操作,通常不建议在较大的桌子上使用.
在RDBMS中,磁盘空间的一些冗余使用是正常状态.如果您具有正确配置的autovacuum守护程序,则在插入新行时将使用未使用的空间.