Назад | Перейти на главную страницу

Ошибка PG_Dump из-за ошибочного недостатка места на диске

Я пытаюсь использовать pg_dump на моем локальном хосте для сброса базы данных PostgreSQL объемом 4 ГБ на удаленном компьютере. Мой localhost сообщает о 15 ГБ свободного места. Я отправляю вывод в gzip. Однако примерно через 15 минут обработки pg_dump прерывается, сообщая, что «pg_dump: [tar archiver] не может записать в выходной файл: на устройстве не осталось места». Я постоянно отслеживаю объем свободного дискового пространства на моем компьютере, и он всегда остается в диапазоне ~ 10 ГБ. Почему pg_dump преждевременно выходит из строя из-за нехватки места на диске, хотя места еще много?

Моя команда выглядит так:

pg_dump -c --host=${HOST} --username=${DATABASEUSER} --blobs --format=t ${DATABASE} | gzip -c > /tmp/db-backup.tar.gz

Я предлагаю изменить формат дампа на собственный (-Fc, --format c) и вообще избегать формата tar. AFAIK нет никаких преимуществ использования формата tar вместо пользовательского (оба работают с pg_restore).

Читая между строк, я подозреваю, что вы пытаетесь использовать выходной формат tar, который действительно требует создания временных файлов, которые могут быть большими. Если я правильно угадала, то предлагаю вместо этого использовать «собственный» формат. У формата tar действительно нет никаких преимуществ, кроме этого, есть несколько недостатков.

из http://postgresql.1045698.n5.nabble.com/Out-of-space-making-backup-td1904089.html

Если ваша установка происходит из пакета, то, вероятно, у вас есть поддержка нестандартного формата (zlib) "из коробки". Вы можете контролировать уровень сжатия с помощью опции -Z (значение по умолчанию 6) от 0 (без сжатия) до 9.

Кстати, проверьте свою опцию -c. В соответствии с http://www.postgresql.org/docs/9.0/static/app-pgdump.html

Выведите команды для очистки (удаления) объектов базы данных до (команд для) их создания.

Эта опция имеет смысл только для обычного текстового формата. Для форматов архивов вы можете указать опцию при вызове pg_restore.

BTW2 Для удобства вы можете использовать автоматические переменные среды PostgreSQL, такие как PGHOST, PGUSER, PGDATABASE, PGPORT.

Формат tar pg_dump в PostgreSQL ограничивает размер любой одной таблицы до 8 ГБ до применения сжатия. А база данных размером 4 ГБ не будет выгружаться в файл размером 4 ГБ; текстовый формат будет больше для некоторых типов данных, и, поскольку я вижу, что вы сбрасываете капли, вы легко можете попасть в эту категорию. Еще одна возможность состоит в том, что у вас есть таблица размером, скажем, 3 ГБ; при сбросе он расширяется до> 8 ГБ; и вы достигли предела tar, который применяется до того, как сработает сжатие. Выгрузка в виде обычного текста или пользовательского формата вместо этого устранит вашу проблему, если это то, что происходит.

Другая возможность заключается в том, что размер вашего диска такой, что ~ 10 ГБ составляет около 5%. Если ваш раздел составляет около 200 ГБ, вы можете достичь предела, когда 5% пространства зарезервировано для root на ext4. Вы можете устранить это, используя что-то вроде этого, если это так:

sudo tune2fs -m 0 /dev/sda1