У меня есть резервная копия каталога данных PostgreSQL 8.3. Мне нужно скопировать базу данных из этой резервной копии в новый экземпляр PostgreSQL. Из-за проблем со старым сервером я не могу выполнить pg_dump базы данных.
Я выяснил, в каком каталоге находится рассматриваемая база данных. В MySQL, например, все, что вы обычно делаете, - это выключите сервер, скопируйте каталог и перезапустите его, и база данных станет доступной. Теперь это не работает с PostgreSQL, и я подозреваю, что это потому, что база данных не указана в файле global / pg_database. Кажется, что этот файл создается автоматически при запуске PostgreSQL, так как я могу сообщить системе, что база данных существует?
Имейте в виду, что в PostgreSQL каталог данных вашего кластера представляет собой автономную единицу, которую нельзя надежно восстановить по частям, как указано в документации. Вот.
Ваша лучшая надежда - использовать полный каталог данных старого сервера и запустить на нем сервер, а затем восстановить из дампа базы данных, которую вы получите оттуда:
sudo -u postgres postgres -D old_data_directoryили с su:
su postgres postgres -D old_data_directory
sudo -u postgres pg_dump -p /path/to/socket/for/old/directory database_name > dump_file.sqlстановится postgres с su, аналогичным приведенному выше
sudo -u postgres psql -p /path/to/socket/for/new/directory new_database_nameеще раз, получив привилегии postgres, используя su аналогично приведенному выше
Это должно вас настроить или, по крайней мере, указать хороший путь к этому.