Postgresql pg restore: PostgreSQL : Документация: 9.6: pg_restore : Компания Postgres Professional

postgresql — Восстановить дамп psql с другим (новым) именем базы данных -d/—dbname и -f/—file нельзя использовать вместе

Задавать вопрос

спросил

Изменено
2 года, 3 месяца назад

Просмотрено
4к раз

Я создал дамп базы данных PostgreSQL, используя:

 pg_dump --file "dump_file.sql" \
        --host "локальный хост" \
        --порт "5432" \
        --username "имя пользователя" \
        --подробный \
        --формат=с \
        --blobs \
        --кодировка "UTF8" \
        --схема "общедоступная" \
        "имя БД"
 

Затем, когда я пытаюсь его восстановить:

 pg_restore --file "dump_file.sql" \
           --чистый \
           --создавать \
           --нет-привилегий \
           --нет владельца \
           --формат=с \
           -U "имя пользователя" \
           -d "новое имя базы данных"
 

пишет:

 pg_restore: ошибка: опции -d/--dbname и -f/--file нельзя использовать вместе. 
 

И если я удалю -d "newdatabasename" , он говорит:

 pg_restore: ошибка: не удалось прочитать из входного файла: конец файла
 

Вопрос

Как я могу восстановить эту базу данных под новым именем?

Почитав немного, я подумал, что --no-privacy --no-owner исправит это, но это не так…

  • postgresql
  • pg-восстановление

3

С pg_restore файл дампа , а не аргумент для --file . Это вообще не опционный аргумент.

 pg_restore --clean \
           --создавать \
           --нет-привилегий \
           --нет владельца \
           --формат=с \
           -U "имя пользователя" \
           -d "новое имя базы данных" \
           "dump_file.sql"
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

postgresql — Как восстановить резервную копию postgres — ОШИБКА: не удается удалить текущую открытую базу данных

Я пытаюсь восстановить резервную копию postgres из системы, которая больше не подготовлена, и я получаю ряд ошибок, в зависимости от что я пытаюсь.

  • У меня есть только резервные копии, нет оригинальных серверов для ссылки
  • Я успешно восстанавливал данные из этих производственных резервных копий в прошлом, но с момента последнего успеха испортил свою локальную среду (например, переустановил postgres через Homebrew)
  • Я считаю, что бывший коллега (уже недоступен) успешно восстановил эту конкретную резервную копию
  • Я столкнулся с той же ошибкой, когда:
    • попытка резервного копирования с помощью [email protected]
    • попытка использовать предыдущую заведомо исправную версию базы данных (с использованием postgres 11)

(я прочитал похожие/предлагаемые вопросы, и они не кажутся актуальными)

Резервная копия была создана с помощью следующей команды (в сценарии bash):

 pg_dump --schema=public -Fc
 

И команда, используемая для восстановления сценария (который повторяется как текст справки сценарием резервного копирования):

 dropdb ${PGDATABASE}
созданб ${PGDATABASE}
время pg_restore \
    -j4 \
    -d ${PGDATABASE} \
    --создавать \
    --нет-привилегий \
    --нет владельца \
    --чистый \
    --если-существует \
    --выход при ошибке \
    "${имя_каталога}/${имя_файла}"
 

Когда я запускаю команду восстановления локально, я получаю следующее:

 time pg_restore -j4 -d ${PGDATABASE} --create --no-privious --no-owner --clean --if-exists -- выход-при-ошибке . ./backups/backup__2019-09-03_16-00-19.pg_dump
pg_restore: [archiver (db)] Ошибка при ОБРАБОТКЕ TOC:
pg_restore: [archiver (db)] Ошибка из записи TOC 4954; 1262 962277 БАЗА ДАННЫХ mydb mydb
pg_restore: [archiver (db)] не удалось выполнить запрос: ОШИБКА: невозможно удалить текущую открытую базу данных
    Команда была такой: УДАЛИТЬ БАЗУ ДАННЫХ, ЕСЛИ СУЩЕСТВУЕТ mydb;
реальный 0m0.049с
пользователь 0м0.019с
система 0m0.012s
 

Раньше у меня только когда-либо были «ошибки нехватки места на диске» после нескольких минут работы, но, как вы можете видеть из вывода time , эта ошибка возникает почти сразу!

Резервная копия создается со сжатием -Fc , и я могу распаковать резервную копию в открытый текст, используя pg_restore backup.pg_dump > backup.sql , но я не могу найти там какие-либо команды, связанные до УДАЛИТЬ БАЗУ ДАННЫХ :/

 -- Сброшено из базы данных версии 9.6.11
-- Сброшено pg_dump версии 11.3 (Ubuntu 11. 3-1.pgdg14.04+1)
 

Я вижу, что БД изначально была сброшена с 9.6.11 , но я достаточно уверен, что ранее успешно восстанавливал с помощью PG 10…

Я пробовал разные вещи, например:

 time pg_restore -d $ {PGDATABASE} --нет-привилегий --нет-владелец --выход-при-ошибке ../backups/backup__2019-09-03_16-00-19.pg_dump
pg_restore: [archiver (db)] Ошибка при ОБРАБОТКЕ TOC:
pg_restore: [archiver (db)] Ошибка из записи 7 оглавления; 2615 1033373 СХЕМА общедоступной mydb
pg_restore: [archiver (db)] не удалось выполнить запрос: ОШИБКА: схема «public» уже существует
Команда была: CREATE SCHEMA public;
ptim: dropdb mydb; созданнаяb mydb
ptim:каталог ptim$ dropdb mydb
ptim:каталог ptim$ время pg_restore -d ${PGDATABASE} --create --без привилегий --без владельца --выход при ошибке ../backups/backup__2019-09-03_16-00-19.pg_dump
pg_restore: [archiver (db)] соединение с базой данных "mydb" не удалось: FATAL: база данных "mydb" не существует
# думаю, я неправильно понял флаг создания!
ptim:каталог ptim$ dropdb mydb; созданнаяb mydb
dropdb: ошибка удаления базы данных: ОШИБКА: база данных «mydb» не существует
ptim:каталог ptim$ время pg_restore -d ${PGDATABASE} --create --no-привилегий --no-owner --exit-on-error .