Відповіді:
Це тому, що це так, як працює pg_restore.
Посібник pg_restore говорить наступним чином:
-C, --create Створити базу даних, перш ніж відновити її. Якщо --clean також вказано, скиньте та відтворіть цільову базу даних перед підключенням до неї.
Якщо використовується цей параметр, база даних з іменем -d використовується лише для видачі початкових команд DROP DATABASE та CREATE DATABASE . Усі дані відновлюються у назві бази даних, яка з’являється в архіві .
-D відновить у даній базі даних, якщо і лише якщо -C не використовується. Якщо використовується -C, база даних використовується як "запуск", а не як пункт призначення.
docker-compose -p dump_import -f docker/dump_import.yml run --rm be bash -c 'waitforit -host=postgres -port=5432 -timeout=30 && export PGPASSWORD=$DATABASE_PASSWORD && createdb --echo --port=$DATABASE_PORT -host=$DATABASE_HOST --username=$DATABASE_USER $DATABASE_NAME && pg_restore --format=c --dbname=$DATABASE_URL_WITHOUT_QUERY tmp/full.dump && echo "Import done"'
Коротше кажучи, ви хочете або (очистити існуючі): (зверніть увагу на ім'я бази даних postgres
)
pg_restore -c -d postgres db.dump
або (створити новий)
pg_restore -C -d postgres db.dump
або (створити нове явно)
createdatabase the_database
pg_restore -d the_database db.dump
Дивіться, що сказала ШОС для більш детальної інформації.
pg_restore: [archiver] -C and -c are incompatible options
pg_restore -C -d postgres db.dump
може виглядати страшно, але це нічого не робить для бази даних postgres, вона використовується лише для початкового з'єднання.
Щоб бути більш чітким, саме це я і вирішив для мене:
Створіть порожню базу даних з потрібним іменем: (у моєму випадку ім'я користувача було "postgres")
psql -U [username]
Потім він запропонує ввести пароль. У цей момент ви увійдете в систему як [ім'я користувача]. Введіть наступне:
CREATE DATABASE [dbname];
Тепер вийдіть із сеансу та поверніться до звичайного сеансу терміналу.
Відновіть базу даних з файлу, у якому ви встановили цільове ім'я бази даних, як саме те ім'я бази даних, яке ви тільки що створили.
cat [your_file_path/filename] | psql -U [username] [dbname]
Де [your_file_path / filename] - це розташування файлу db або текстового файлу, який ви хочете відновити.
-F
опції de ви повинні використовувати pg_restore для відновлення резервної копії, якщо ви не використовуєте, -F p
який створює звичайний текстовий файл із sql пропозиціями.
pg_restore
. Параметр -C може створити лише базу даних, ім'я якої відповідає імені бази даних у дамп-файлі. Щоб відновити довільну базу даних, перед запуском потрібно запуститиCREATE DATABASE new_db;
в psqlpg_restore --dbname=new_db
.