我正在PostgreSQL9.6上运行一些测试。我创造了一张桌子:
CREATE TABLE salary
(
id serial NOT NULL,
employee_id numeric,
salary_amount numeric,
CONSTRAINT salary_pkey PRIMARY KEY (id)
)然后插入一些数据并回滚:
begin;
insert into salary (employee_id, salary_amount)
values
(2,1000),(3,2000),(5,2000),(6,2000),(7,2000),(9,2000),(4,2000);
rollback;回滚此事务后,薪资表的大小正在增加,但没有创建记录。
发布于 2017-02-11 15:54:03
文件变得更大,因为在回滚事务之前,记录被写入表的文件。它们对其他事务是不可见的,即使它们在文件中。
查询性能受文件中死元组的影响,因为简单地说,查询在查找活动记录时可能需要读取它们。这就是为什么PostgreSQL有一个名为“清除”的操作,该操作可以清除未使用的数据,为新记录腾出空间。
任何最近的PostgreSQL版本都会在必要时自动关闭您的表。还可以使用真空SQL命令强制执行此操作:
VACUUM salary;或在命令行上:
vacuumdb -t salary database不过,你不需要这样做,除非你有一些严肃的大规模活动在桌面上。请注意,文件通常不会变得更小,即使是在清空之后:真空不会移动记录,因此文件大小由最后一个活动记录的位置控制。
https://stackoverflow.com/questions/42177733
复制相似问题