更新表数据后会占用更多的存储空间吗?
Redrock Postgres 引入了撤消日志,修改元组时会标记删除索引记录,实现了就地更新。另外,在执行删除或非就地更新的事务提交后,会立即重用空间。因而在更新表数据后,并不会占用更多的存储空间。
下面我们通过创建一个表,插入一些数据,并对表数据进行更新操作,查看表占用的存储空间在更新前后是否会发生变化。
CREATE TABLE t_large (id integer, name text);
INSERT INTO t_large (id, name)
SELECT i, 'xxx' FROM generate_series(1, 1000000) AS s(i);
SELECT pg_size_pretty(pg_table_size('t_large'));
pg_size_pretty
----------------
19 MB
UPDATE t_large SET id = id - 1, name = 'yyy';
SELECT pg_size_pretty(pg_table_size('t_large'));
pg_size_pretty
----------------
19 MB
从上面的测试结果来看,在我们对表t_large
进行全表更新完后,该表占用的存储空间没有发生变化。