PG_DUMP Память вышла из строя

Я пытаюсь сделать резервную копию продуктов базы данных с помощью pg_Dump.

Общий размер базы данных составляет 1,6 ГБ. Одной из таблиц в базе данных является product_image размером 1 ГБ.

Когда я запускаю pg_dump в базе данных, резервное копирование базы данных завершается с ошибкой.

##pg_dump: Dumping the contents of table "product_image" failed: 
PQgetCopyData
() failed.
pg_dump: Error message from server: lost synchronization with server: 
got messag
e type "d", length 6036499
pg_dump: The command was: COPY public.product_image (id, username, 
projectid, session, filename, filetype, filesize, filedata, uploadedon, "timestamp") T

Если я попытаюсь сделать резервную копию базы данных, исключив таблицу product_image, резервная копия будет выполнена успешно.

Я попытался увеличить shared_buffer в postgres.conf до 1,5 ГБ с 128 МБ, но проблема все еще сохраняется. Как решить эту проблему?


person user5042873    schedule 24.06.2015    source источник
comment
Хм. Это может быть ошибка. Какая используется точная версия сервера PostgreSQL (полный вывод SELECT version()) и версия pg_dump (полный вывод pg_dump --version)? Кроме того, появляется ли что-нибудь в журнале ошибок сервера PostgreSQL, когда происходит это отключение? Покажите логи вашего сервера. Пожалуйста, внесите эти изменения, редактируя вопрос, а затем оставьте комментарий здесь, когда закончите.   -  person Craig Ringer    schedule 24.06.2015
comment
Откуда ваше предположение, что это из-за нехватки памяти? Где-то есть указание на то, что это так?   -  person Craig Ringer    schedule 24.06.2015
comment
Я только что столкнулся с этой проблемой на сервере Ubuntu, и она казалась не связанной с единственным упомянутым ответом (ошибка RedHat). Моя проблема также казалась случайной — pg_dumps аналогичного размера (и больше) работали нормально до и после наблюдаемого сбоя, без видимых изменений.   -  person abeboparebop    schedule 30.11.2016


Ответы (1)


Я столкнулся с той же ошибкой, и это было связано с глючным патчем от RedHat для OpenSSL в начале июня (2015). В списке рассылки PostgresSQL есть связанное обсуждение.

Если вы используете соединения SSL и превышаете пороговое значение передаваемого размера, которое зависит от вашей версии PG (по умолчанию 512 МБ для PG ‹ 9.4), туннель пытается повторно согласовать ключи SSL, и соединение прерывается с указанными вами ошибками.

Исправление, которое сработало для меня, заключалось в установке ssl_renegotiation_limit до 0 (неограниченно) в postgresql.conf с последующей перезагрузкой.

ssl_reegotiation_limit (целое число)

Указывает, какой объем данных может передаваться через соединение с шифрованием SSL, прежде чем произойдет повторное согласование ключей сеанса. Повторное согласование снижает шансы злоумышленника на выполнение криптоанализа, когда можно проверить большие объемы трафика, но также приводит к значительному снижению производительности. Сумма отправленного и полученного трафика используется для проверки лимита. Если для этого параметра установлено значение 0, повторное согласование отключено. По умолчанию 512 МБ.

person adamba    schedule 30.06.2015