Postgresql 将列类型从int改为bigint可以释放空间吗?
我有一个带有Postgresql 将列类型从int改为bigint可以释放空间吗?,postgresql,database-design,storage,postgresql-9.5,vacuum,Postgresql,Database Design,Storage,Postgresql 9.5,Vacuum,我有一个带有inttype列的表,在一个约15m行的表中。 OS windows 7和C磁盘(安装postgres的位置)显示: 59 GB不含238 GB 然后我将此列类型更改为bigint: ALTER TABLE mytable ALTER column col TYPE bigint; 现在,C盘: 61 GB不含238 GB 如何释放2GB?看起来bigint比int占用的空间更少?或者发生了什么 这台计算机(这是本地/家庭计算机)上目前没有其他进程。bigint需要8个字节,int
int
type列的表,在一个约15m行的表中。OS windows 7和C磁盘(安装postgres的位置)显示: 59 GB不含238 GB 然后我将此列类型更改为
bigint
:
ALTER TABLE mytable ALTER column col TYPE bigint;
现在,C盘:
61 GB不含238 GB
如何释放2GB?看起来bigint
比int
占用的空间更少?或者发生了什么
这台计算机(这是本地/家庭计算机)上目前没有其他进程。
bigint
需要8个字节,int
需要4个字节,但磁盘空间取决于整行
真空满
)可以减小工作台的物理尺寸。您的ALTER TABLE
导致整个表重写,从而使表膨胀。但它也使以后的真空
(或真空满
)能够简单地用死元组修剪数据页,从而有效地压缩表<代码>真空由自动真空
以默认设置自动运行(但不是真空满
)
除此之外,将列从
int
更改为bigint
不会减少行大小(没有膨胀)。有时它保持不变,因为前一行有4个字节的对齐填充,可以由bigint
使用。或者行大小增加另一个(通常)8字节。只是为了清楚起见-只有真空满
可以减少表使用的磁盘空间。即使这并不总是正确的——如果可以删除某些页面,则取决于数据文件页面中已删除元组的数量。并创建新的数据文件
纯
VACUUM
仅通过删除已删除的元组来释放现有数据文件页面中的空间,但不会减少数据文件中已分配页面的数量。而且不会创建新的数据文件。实际上,plainVACUUM
会对物理文件末尾的可移动数据页进行机会主义修剪。