postgres 脚本中 ROLLBACK 后未回收空间

问题描述 投票:0回答:1

我有一个使用 pgadmin 中的 psql 工具在 RDS 实例上运行的 postgres 脚本:

BEGIN;

update table set mytimecolumn = 'this';
update table set mytimecolumn = 'that';
update table set mydatecolumn = 'this';
update table set mydatecolumn = 'that';

COMMIT;

我在实例上的脚本中间空间不足,并运行了 ROLLBACK; 即使脚本确实回滚了,我的空间也没有被回收

预计空间几乎会立即被回收。谁能解释一下为什么没有被回收?

sql postgresql amazon-rds
1个回答
0
投票

你需要运行

vacuum analyze your_table;

由于MVCC

update
实际上是一个
insert
,它写入了一个全新的值并将旧值标记为过时。仅当您
commit
操作并且没有使用旧值的快照打开其他事务时,旧版本的行占用的空间才会被autovacuum、表重写或某人手动发出
vacuum
回收。

将完全清空的表页将返回到系统,但在不完全重写表的情况下,任何其他页上的空白空间仍将分配给表并可供其独占使用。

© www.soinside.com 2019 - 2024. All rights reserved.