Проблемы с использованием pg_restore, psql или pgAdmin4 для восстановления резервной копии базы данных postgres.

Вопрос или проблема

Это низкие ставки и просто репетиция для того случая, когда мне срочно нужно будет это сделать, а также чтобы подтвердить, что pg_dump сработал удовлетворительно.

Я пытаюсь использовать psql или pg_restore, чтобы восстановить мою копию базы данных Postgres в новую базу данных. Я использую Ubuntu 22.04.

Как мой обычный пользователь, rlm, в ~ я могу ввести dir и получить, среди других файлов, мой вывод apgym.sql из pg_dump.

Итак, я ввожу pg_restore -d testRestore -U postgres apgym.sql и получаю: pg_restore: error: input file appears to be a text format dump. Please use psql.

Я думаю, ладно, я использую psql. Я ввожу его и получаю psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: database "rlm" does not exist Я не понимаю сообщение об ошибке, но попробую снова как пользователь Postgres. Итак, я ввожу

sudo su postgres и становлюсь пользователем postgres. Я ввожу psql -d testRestore -f apgym.sql в том же каталоге, где находится мой файл apgym.sql, и получаю:

could not change directory to "/home/rlm": Permission denied
psql: error: apgym.sql: No such file or directory

Я не могу использовать pgAdmin для восстановления из резервной копии, он говорит, что статус “Failed” за 0,02 секунды. enter image description here

Как я могу восстановить мою резервную копию базы данных postgres? Мне нужно уметь это делать на случай, если мои данные будут испорчены, и я захочу вернуться. Пожалуйста, не предлагайте альтернативы: я хочу сделать это таким способом.

В случае, если это поможет читателям или тем, кто хочет создать собственный вывод pg_dump в будущем, я создал резервную копию с помощью команды pg_dump -h localhost -U postgres -W apGymPostgres > apgym.sql

Решением для меня было обойти эту проблему. Мне не удалось заставить psql или pg_restore восстановить созданную мной резервную копию. Предположительно, поскольку я создал текстовый файл pg_dump, мне нужно было использовать psql. Но я не смог заставить psql работать.

Успех начался, когда я нашел руководство, в котором говорилось, что, если я использую файл дампа в формате tar, то могу использовать pg_restore. Я смог создать файл дампа tar с помощью pgAdmin, а затем аналогично восстановить, используя pgAdmin.

Так что это не решение, чтобы заставить работать текстовый pg dump, но это обходной путь.

Ответ или решение

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

Проблема с форматом резервной копии

Вы создали резервную копию с помощью команды pg_dump -h localhost -U postgres -W apGymPostgres > apgym.sql. Этот метод создает резервную копию в виде текстового файла SQL, что требует использования psql для восстановления, а не pg_restore, который предназначен для работы с другими форматами (например, tar или custom).

Переход на tar-формат

Ваше решение обойти проблему с использованием формата tar было правильным подходом. Воспользовавшись форматом tar, вы можете использовать pg_restore, который автоматически обрабатывает необходимые сценарии для восстановления базы данных.

Решение ошибки с использованием psql

Для восстановления из текстового файла SQL используя psql, необходимо выполнить следующие шаги:

  1. Подключение к базе данных: Убедитесь, что база данных testRestore существует. Если нет, создайте её с помощью команды:

    createdb -U postgres testRestore
  2. Использование psql: Перейдите в каталог, где находится ваш файл apgym.sql, и выполните следующую команду под пользователем, имеющим доступ к базе данных:

    psql -U postgres -d testRestore -f apgym.sql

    Если вы видите ошибку "No such file or directory", убедитесь, что рабочий каталог является тем, где лежит apgym.sql, или укажите полный путь к файлу.

  3. Проблема с правами доступа: Если вы пытаетесь выполнить команду psql под пользователем postgres, но получаете could not change directory, возможно, стоит изменить права доступа к каталогу или переместить файл в доступный каталог, например, /tmp.

Диагностика ошибки подключения

Ошибка "connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: database "rlm" does not exist" возникает, когда psql пытается по умолчанию подключиться к базе с именем пользователя текущей системы. Обязательно указывайте базу данных с помощью опции -d.

Использование pgAdmin

Хотя вам удалось перенести процесс в pgAdmin, важно отметить, что этот инструмент также поддерживает множество форматов резервных копий и может быть использован для создания как текстовых, так и tar резервных копий. Убедитесь, что выбрали правильный формат при создании резервной копии и восстановления.

Заключение

Итак, существуют разные подходы для восстановления баз данных в PostgreSQL, и ваш опыт показывает, что важно выбрать правильный инструмент и подходящий формат резервной копии. Для будущих резервных копий, если вы предпочитаете текстовый формат, используйте появившиеся здесь рекомендации по команды psql. В противном случае, tar-формат может быть более универсальным с точки зрения возможности восстановления.

Оцените материал
Добавить комментарий

Капча загружается...