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

Неверная контрольная сумма при восстановлении базы данных PostgreSQL (32 бита) из резервной копии на Mac Os X 64 бита

Когда я пытаюсь восстановить базу данных PostgreSQL из резервной копии, сохраненной в моей старой версии Mac Os X 10.5 (32 бита) на моей новой версии 10.6 (64 бита), у меня появляется эта ошибка:

# sudo -u postgres /opt/local/lib/postgresql82/bin/postgres -D defaultdb_backup
FATAL:  incorrect checksum in control file

Это произошло из-за того, что на одном сервере была установлена ​​32-разрядная версия, а на другом - 64-разрядная.

Как мне восстановить старые данные?

Установите где-нибудь postgres в той же версии, что и раньше, на той же архитектуре, компилируйте с теми же параметрами, после чего сможете восстановить. создание резервных копий путем записи сегментов wal и / или копирования каталога данных не совсем переносимо.

Как сказал depesz, вам нужно будет скомпилировать 32-битную версию Postgres для импорта резервной копии. У вас должна быть возможность получить установщик с веб-сайта Postgres и временно запустить 32-битную версию даже при 64-битной установке OS X.

Кстати, в будущем при резервном копировании я НАМНОГО предпочитаю использовать pg_dump --clean для получения полного дампа из базы данных. Вы можете использовать файл pg_dump --clean в любой версии postgres.

Я нашел, как восстановить свои данные.

Исполняемый файл postgresql имеет 64 бита:

# file /opt/local/lib/postgresql82/bin/postgres
/opt/local/lib/postgresql82/bin/postgres: Mach-O 64-bit executable x86_64

Я проверяю, что исполняемый файл postgresql в моей резервной копии имеет 32 бита:

# file /Volumes/Backup/Backups.backupdb/MyMacBook/2009-09-23-004611/Macintosh\ HD/opt/local/lib/postgresql82/bin/postgres
/Volumes/Backup/Backups.backupdb/MyMacBook/2009-09-23-004611/Macintosh HD/opt/local/lib/postgresql82/bin/postgres: Mach-O executable i386

Копирую в свою систему:

# sudo cp /Volumes/Backup/Backups.backupdb/MyMacBook/2009-09-23-004611/Macintosh\ HD/opt/local/lib/postgresql82/bin/postgres /opt/local/lib/postgresql82/bin/postgres_32

И теперь, когда я это сделаю:

# sudo -u postgres /opt/local/lib/postgresql82/bin/postgres_32 -D defaultdb_backup

Оно работает !

Спасибо вам всем