Это очень актуальная ситуация.
У нас есть база данных postgres 9.4, установленная на машине CentOs.
Мы пытаемся сделать резервную копию из базы данных Heroku Postgres и восстановить ее в базу данных на машине CentOs.
Команды, которые мы используем: pg_dump -Fc -h ec2-99-99-99-99.compute-1.amazonaws.com -p 5762 -U xyz -d dbname > file.dump
В дампе, созданном pg_dump, похоже, отсутствуют данные из столбцов, имеющих тип двоичного (эти столбцы содержат изображения в двоичном формате).
Когда мы восстанавливаем эту резервную копию в базе данных на CentOS с помощью следующей команды, все изображения из образа, то есть столбцы двоичного типа, отсутствуют:
pg_restore -d onlinedb ~/file.dump
Мы должны выходить в эфир утром и совершенно обескуражены этой неожиданной проблемой.
Выход \d attachments
(вложения - это таблица проблем) команда:
Table "public.attachments"
Column | Type | Modifiers
------------------+------------------------+-----------
id | integer | not null
configuration_id | integer |
style | character varying(255) |
file_contents | bytea |
Дополнительная информация: База данных heroku postgres, из которой мы создаем резервную копию, - это PostgreSQL 9.2.6. Мы восстанавливаем PostgreSQL 9.4.
Наконец-то мы смогли восстановить резервную копию. Мы перепробовали так много всего, что я не уверен, что это за исправление, но мы пришли к выводу, что проблема заключалась в настройке bytea_output в postgresql.conf. Мы думаем, что Heroku использовал значение «escape», в то время как наш сервер базы данных использовал «шестнадцатеричный», и это вызвало проблему.