Почему в Docker postgresql база весит больше чем на сервере
У меня была база в Docker container которая которую я перенес на сервер, но после дампа я обнаружил что размер данных раличался на 2-10 мб. Только ни каких потерсь в данных не обнаружилось
Почему это могло случится
Я дампил данные из докера вот таким образом
sudo docker exec -i docker_container pg_dump -U username -d database > /home/plazun/dump.sql
sudo -u postgres -i
psql -d database < /home/plazun/dump.sql
В докере
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------------+-------+------------+----------+-------------
public | table1 | table | owner | 24 MB |
public | table2 | table | owner | 127 MB |
public | table3 | table | owner | 16 kB |
public | table4 | table | owner | 10232 kB |
public | table5 | table | owner | 320 kB |
(5 rows)
На сервере
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------------+-------+------------+----------+-------------
public | table1 | table | owner | 19 MB |
public | table2 | table | owner | 71 MB |
public | table3 | table | owner | 16 kB |
public | table4 | table | owner | 10216 kB |
public | table5 | table | owner | 296 kB |
(5 rows)
Ответы (1 шт):
При переносе БД она почти всегда уменьшается. Если с ней конечно шли какие то операции. Даже простое добавление записей в таблицу модифицирует индексы, они становятся не оптимальными по хранению, занимают больше места. А после полной перестройки они ложатся более оптимально. При модификации/удалении строк postgresql оставляет старую копию и создает новую в другом месте таблицы. Место занимаемое старой записью через какое то время может быть использовано повторно, но это происходит не так уж и быстро, таблицы со временем начинают содержать большое количество пропусков. При дампе разумеется берутся только актуальные версии строк и пустого места в залитых с нуля таблицах нет.