PostgreSQL veritabanını yedeklemek ve geri yüklemek için pg_dump / pg_restore kullanıyorum, ancak pg_restore'dan bazı hata mesajları (ve sıfır olmayan bir çıkış durumu) alıyorum. (Aşağıda özetlenen) süper basit bir temel durum denedim ama yine de bu hataları aldım:
pg_restore: [archiver (db)] TOC İŞLENİRKEN hata: pg_restore: [archiver (db)] İçindekiler 5 girişinden hata; 2615 2200 SCHEMA halka açık postgres pg_restore: [archiver (db)] sorgu yürütülemedi: HATA: "genel" şeması zaten var Komut şuydu: SCHEMA'yı CREATE public;
Yeniden oluşturma adımları:
- Taze, vanilya Ubuntu 14.04 dağıtımını kurun (Vagrant'ı bu Vagrant kutusuyla kullanıyorum ).
- PostgreSQL 9.3'ü kurun, herhangi bir Linux kullanıcısından PostgreSQL kullanıcısı "postgres" olarak yerel bağlantılara izin verecek şekilde yapılandırın.
Bir test veritabanı oluşturun. Sadece yapıyorum:
vagrant @ vagrant-ubuntu-trusty-64: ~ $ psql - kullanıcı adı = postgres postgres psql (9.3.5) Yardım için "yardım" yazın. postgres = # veritabanı oluştur mydb; VERİTABANI YARAT postgres = # \ q vagrant @ vagrant-ubuntu-trusty-64: ~ $ psql - kullanıcı adı = postgres mydb psql (9.3.5) Yardım için "yardım" yazın. mydb = # tablo verisi oluştur (bigint girişi); TABLO OLUŞTUR mydb = # veri değerlerine ekleme (1); INSERT 0 1 mydb = # veri değerlerine ekleme (2); INSERT 0 1 mydb = # veri değerlerine ekleme (3); INSERT 0 1 mydb = # \ q
Veritabanının böyle bir yedeğini oluşturun:
PGPASSWORD = "postgres" pg_dump --dbname = mydb - kullanıcı adı = postgres --format = özel> pg_backup.dump
Mydb'deki veri tablosundan bazı satırları silin, böylece verileri başarıyla geri yükleyip yüklemediğimizi söyleyebiliriz.
Veritabanını şununla geri yükle:
PGPASSWORD = "postgres" pg_restore --clean --create --dbname = postgres - kullanıcı adı = postgres pg_backup.dump
Veriler geri yüklenir, ancak 6. adımdaki pg_restore komutu durumdan çıkar 1
ve aşağıdaki çıktıyı gösterir:
pg_restore: [archiver (db)] TOC İŞLENİRKEN hata: pg_restore: [archiver (db)] İçindekiler 5 girişinden hata; 2615 2200 SCHEMA halka açık postgres pg_restore: [archiver (db)] sorgu yürütülemedi: HATA: "genel" şeması zaten var Komut şuydu: SCHEMA'yı CREATE public; UYARI: geri yükleme sırasında göz ardı edilen hatalar: 1
Bunu görmezden gelemem çünkü bu komutu programlı olarak çalıştırıyorum ve geri yükleme işleminin başarısız olup olmadığını belirlemek için çıkış durumunu kullanmanız gerekiyor. Başlangıçta, bu sorunun veritabanımı genel (varsayılan şema) koymak nedeniyle olduğunu merak ettim. Ben --create
veri geri yüklenmeden önce pg_restore tarafından seçeneğin bir sonucu olarak yaratıldığını düşündüm (bu benim masamın olduğu yer olduğu için bu şemayı da oluşturmayı deneyebilir), ancak yukarıdaki adımları masamla denediğimde farklı bir şemada, sonuçlar aynıydı ve hata mesajları aynıydı.
Yanlış bir şey mi yapıyorum? Neden bu hatayı görüyorum?
--create
olmadan belirtmekclean
sorunu çözmez.