Quando você restaura um banco de dados, todas as informações estão compactadas , sem espaço vazio entre linhas (ou índices), a menos que algumas configurações específicas estejam em vigor (basicamente: FILLFACTOR
para tabelas e FILLFACTOR
índices ).
Por outro lado, quando seu banco de dados estiver em uso há algum tempo e você tiver compartilhado inserções, atualizações e exclusões, será exibido espaço livre não utilizado . Isso ocorre pela maneira como o PostgreSQL e o Multiversion Concurrency Control, também conhecido como MVCC, funcionam. O MVCC permite menos bloqueios, o que basicamente significa que você economiza tempo . Mas você paga um preço em termos de espaço :
- Cada um
UPDATE
é equivalente a um INSERT
junto com um DELETE
, com a sobrecarga (pelo menos em termos de espaço usado) associada a ambos.
- Quando você tem várias transações em execução, e cada uma está
INSERT
ing, UPDATE
ing ou DELETE
ing, você tem simultaneamente várias cópias de cada linha envolvida.
- O espaço alocado para essas versões de linha não será liberado imediatamente após a confirmação e, por algum tempo, será um espaço não utilizado nos arquivos em que os dados (e índices) da tabela estão sendo armazenados.
O vácuo automático cuida desse espaço que está sendo reutilizado por padrão, ou você pode ter algum procedimento específico para a aspiração de rotina .
Esse fato já pode explicar a mudança de tamanho.
As otimizações entre versões provavelmente também ocorreram; e pode explicar outras melhorias. Otimizações também poderiam ter sido feitas para velocidade e não para tamanho, e o tamanho real poderia realmente crescer de uma versão para a seguinte. Eu realmente não sei as especificidades para poder dizer; embora o comentário do @Erwin afirme que tanto as alterações que diminuem suas tabelas quanto as que aumentam de tamanho ocorrem desde a versão 8.3.
Para distinguir entre os dois efeitos, se você estiver curioso, poderá, como sugere @Jack Douglas, restaurar seu banco de dados na versão 8.3. Provavelmente diminuirá de tamanho. Se ele diminuir para menos de 151 MB (um tamanho menor do que o obtido na versão 9.4), a remoção do espaço não utilizado fez o banco de dados diminuir e a alteração de versão realmente fez o banco de dados crescer.
Para uma melhor compreensão do MVCC, veja a apresentação de Bruce Momjian .