Yanıtlar:
Bunun nedeni pg_restore'un çalışma şeklidir.
pg_restore kılavuzu şu şekildedir:
-C, --create Geri yüklemeden önce veritabanı oluşturun. --Clean ayrıca belirtilirse, hedef veritabanını bağlamadan önce bırakın ve yeniden oluşturun.
Bu seçenek kullanıldığında, -d adlı veritabanı yalnızca ilk DROP DATABASE ve CREATE DATABASE komutlarını vermek için kullanılır . Tüm veriler arşivde görünen veritabanı adına geri yüklenir .
-D yalnızca -C kullanılmazsa verilen veritabanında geri yüklenir. -C kullanılırsa, veritabanı hedef olarak değil, "fırlatma rampası" olarak kullanılır.
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"'
Kısacası, (mevcut olanı temizle): (veritabanı adının olduğunu unutmayın postgres
)
pg_restore -c -d postgres db.dump
veya (yeni oluştur)
pg_restore -C -d postgres db.dump
veya (açıkça yeni oluştur)
createdatabase the_database
pg_restore -d the_database db.dump
Daha fazla ayrıntı için SCO'nun söylediklerine bakın.
pg_restore: [archiver] -C and -c are incompatible options
pg_restore -C -d postgres db.dump
korkutucu görünebilir, ancak postgres veritabanına hiçbir şey yapmaz, yalnızca ilk bağlantı için kullanır.
Biraz daha açık olmak gerekirse, bu benim için sorunu çözdü yaptım:
İstediğiniz adla boş bir veritabanı oluşturun: (benim durumumda kullanıcı adı 'postgres' idi)
psql -U [username]
Daha sonra parolanızı girmenizi isteyecektir. Bu noktada [kullanıcı adı] olarak giriş yapacaksınız. Aşağıdakileri yazın:
CREATE DATABASE [dbname];
Şimdi oturumdan çıkın ve normal terminal oturumunuza geri dönün.
Veritabanını, hedef veritabanı adını yeni oluşturduğunuz veritabanı adı olarak ayarladığınız dosyadan geri yükleyin.
cat [your_file_path/filename] | psql -U [username] [dbname]
Burada [dosya_yolunuz / dosyaadı] geri yüklemek istediğiniz db dosyasının veya metin dosyasının konumudur.
-F
seçeneğini kullanarak yedek oluştururken, -F p
sql cümleleri olan düz bir metin dosyası üreten kullanmadığınız sürece yedeklemeyi geri yüklemek için pg_restore'u kullanmanız gerekir .
pg_restore
. -C seçeneği yalnızca adı döküm dosyasındaki veritabanı adıyla eşleşen bir veritabanı oluşturabilir. Rasgele bir veritabanına geri yüklemek için çalıştırmadanCREATE DATABASE new_db;
önce psql'de çalıştırmanız gerekirpg_restore --dbname=new_db
.