Восстановление базы данных PostgreSQL из резервной копии файловой системы

Восстановление базы данных PostgreSQL из резервной копии файловой системы

У меня есть резервная копия каталога данных PostgreSQL 8.3. Мне нужно скопировать базу данных из этой резервной копии в новый экземпляр PostgreSQL. Из-за проблем со старым сервером я не могу сделать pg_dump базы данных.

Я выяснил, какой каталог предназначен для рассматриваемой базы данных. Например, в MySQL все, что вы обычно делаете, это останавливаете сервер, копируете каталог и перезапускаете его, и база данных становится доступной. Теперь это не работает с PostgreSQL, и я подозреваю, что это потому, что база данных не указана в файле global/pg_database. Этот файл, похоже, автоматически генерируется при запуске PostgreSQL, так как мне сообщить системе, что база данных там?

решение1

Обратите внимание, что в PostgreSQL каталог данных кластера представляет собой автономную единицу, которую невозможно надежно восстановить по частям, как указано в документации.здесь.

Лучший вариант — использовать полный каталог данных старого сервера и запустить на нем сервер, а затем восстановить его из дампа базы данных, полученного оттуда:

  1. Получите postgresql.conf, который соответствует конфигурации нового хоста (ориентируйтесь по файлам на старом — которые вы здесь меняете — и новым каталогам данных)
  2. Узнайте имя суперпользователя PostgreSQL старой установки — скорее всего, postgres.
  3. Создайте это имя пользователя (пользователь UNIX) на новом хосте, если его там еще нет.
  4. Предоставьте (chown) старый каталог данных этому пользователю, если только его uid не совпадает с uid на старом сервере.
  5. Настройте pg_hba.conf в старом каталоге данных, чтобы разрешить подключения локальных пользователей к тому же имени пользователя postgres (обычно это значение по умолчанию, но проверьте).
  6. Запустите старый кластер базы данных как пользователь UNIX с тем же именем, что и у суперпользователя старого каталога данных, например, для пользователя postgres:
    sudo -u postgres postgres -D old_data_directory
    # or with su:
    su postgres
    postgres -D old_data_directory
    
  7. сделайте дамп старой базы данных, снова с обычным именем пользователя postgres:
    sudo -u postgres pg_dump -p /path/to/socket/for/old/directory database_name > dump_file.sql
    # becoming postgres with su analogous to above
    
  8. адаптируйте dump_file.sql к именам пользователей нового сервера и т. д.; создайте там пустую базу данных с соответствующим владельцем
  9. просканируйте базу данных на новый сервер:
    sudo -u postgres psql -p /path/to/socket/for/new/directory new_database_name
    # once again, getting postgres privileges using su analogous to above
    

Это должно вас настроить или, по крайней мере, указать хороший путь к цели.

Связанный контент