Cuando restaura una base de datos, tiene toda la información en ella empaquetada , sin espacio vacío entre filas (o en índices), a menos que existan algunas configuraciones específicas (básicamente: FILLFACTOR
para tablas e FILLFACTOR
índices ).
Por otro lado, cuando su base de datos haya estado en uso durante algún tiempo y haya tenido su parte de inserciones, actualizaciones y eliminaciones, aparecerá el espacio libre no utilizado . Esto se debe a la forma en que funcionan PostgreSQL y el Control de concurrencia multiversional, también conocido como MVCC . MVCC permite menos bloqueos, lo que básicamente significa que ahorra tiempo . Pero pagas un precio en términos de espacio :
- Cada
UPDATE
es equivalente a un INSERT
junto con a DELETE
, con la sobrecarga (al menos en términos de espacio utilizado) asociada a ambos.
- Cuando se tiene varias operaciones en ejecución, y cada uno se
INSERT
ing, UPDATE
ing o DELETE
ing, que tienen simultáneamente varias copias de cada fila en cuestión.
- El espacio asignado a estas versiones de fila no se liberará inmediatamente después de la confirmación y, por un tiempo, será espacio no utilizado dentro de los archivos donde se almacenan los datos (e índices) de la tabla.
Autovacuum se encarga de que este espacio se vuelva reutilizable por defecto, o podría tener algún procedimiento específico para la aspiración de rutina .
Este hecho ya puede explicar el cambio de tamaño.
Las optimizaciones entre versiones probablemente también tuvieron lugar; y puede explicar más mejoras. También se podrían haber hecho optimizaciones para la velocidad y no para el tamaño, y el tamaño real podría crecer de una versión a otra. Realmente no sé los detalles para poder contar; aunque el comentario de @Erwin afirma que tanto los cambios que hacen que sus tablas se reduzcan como los cambios que hacen que sus tablas se hinchen (crezcan) se han producido desde la versión 8.3.
Para distinguir entre los dos efectos, si tiene curiosidad, podría simplemente, como sugiere @Jack Douglas, restaurar su base de datos en 8.3. Lo más probable es que disminuya de tamaño. Si se reduce a menos de 151 MB (un tamaño más pequeño que el que obtienes con la versión 9.4), entonces la eliminación del espacio no utilizado hizo que tu DB se redujera, y el cambio de versión realmente hizo que tu DB creciera.
Para una mejor comprensión de MVCC, mire la presentación de Bruce Momjian .