Próbuję uruchomić następujące polecenie:
sshpass -p "pass" ssh x@1.2.3.4 "pg_dump -Fc -U foo some_db" | pg_restore --create --dbname=new_db
Dostaję:
failed: FATAL: database "new_db" does not exist
postgresql
postgresql-9.3
psql
andilabs
źródło
źródło
pg_restore
. Opcja -C może tworzyć tylko bazę danych, której nazwa odpowiada nazwie bazy danych w pliku zrzutu. Aby przywrócić do dowolnej bazy danych, musisz uruchomićCREATE DATABASE new_db;
w psql przed uruchomieniempg_restore --dbname=new_db
.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"'
Krótko mówiąc, chcesz albo (wyczyścić istniejące): (zwróć uwagę, że nazwa bazy danych to
postgres
)lub (utwórz nowy)
lub (utwórz nowe jawnie)
Zobacz więcej informacji SCO.
źródło
pg_restore: [archiver] -C and -c are incompatible options
pg_restore -C -d postgres db.dump
może wyglądać przerażająco, ale nie robi nic z bazą danych Postgres, używa go tylko do pierwszego połączenia.Mówiąc ściślej, to, co zrobiłem, rozwiązało problem:
Utwórz pustą bazę danych z żądaną nazwą: (w moim przypadku nazwa użytkownika to „postgres”)
Następnie wyświetli monit o podanie hasła. W tym momencie zostaniesz zalogowany jako [nazwa użytkownika]. Wpisz następujące polecenie:
Teraz zakończ sesję i wróć do swojej zwykłej sesji terminalowej.
Przywróć bazę danych z pliku, w którym ustawiono docelową nazwę bazy danych jako właśnie utworzoną nazwę bazy danych.
Gdzie [ścieżka_pliku / nazwa pliku] to lokalizacja pliku db lub pliku tekstowego, który chcesz przywrócić.
źródło
-F
opcji de musisz przywrócić kopię zapasową za pomocą pg_restore, chyba że używasz tego,-F p
który tworzy zwykły plik tekstowy ze zdaniami sql.