PostgreSQL DB yedekleme ve test çalışma ve eksiksiz nasıl elde edilir


45

Tam bir Postgres yedeğini nasıl alacağınıza ve MS SQL Server ile alacağınız gibi net bir cevap alabileceğimi ve artık yetim kullanıcılara iyi bakabileceğimi umuyordum.

Okuduklarımdan ve yanlış olabilir, iyi bir PostgreSQL blogu bulmak zor oldu, bu yüzden lütfen bana önermek için çekinmeyin, bu uygulamanın nasıl çalıştığını bulmam gerekiyor, böylece yedeklemelerime ve Slony'ye güvenebiliyorum çoğaltma. Bir geliştirici ben üzerinden PgadminIII aldığım yedeğini geri vardı custom, directoryve tarseçme sırasında formatında OIDler ama onlardan iki yük vermedi söyledi taryaptım ama sadece dizin değil, veri oldu. Şimdi gerçekten kafam karıştı.

  1. PGAdminIII kullanıyorum, bir pg_dumpve pg_dumpallseçeneği var. Geri istiyorum her şeyi ben, gerekmez tüm verileri bu veritabanı bir yere yeniden yüklemek ve evet doğrulamak testine ihtiyaç ve bizim yedek iyidir yukarı söyledi. Sonunda otomatik geri yükleme komut dosyası yazmak istiyorum ama bir seferde bir gün.

pg_dumpallgörünüşte bir var -globalsyedekleme her şeyi gerekiyordu seçeneği, ama için yardım pg_dumpallgösterileri bir -g, --globals-only dump only global objects, no databasesdeğil, bir --globalsseçenek.

pg_dumpallEn azından yabancı anahtarları yedekleyeceğimi düşündüm , ama bu bile bir 'seçenek' gibi görünüyor. Belgelere göre , yabancı anahtarların yedeğini pg_dumpallalmak için bir -oseçenek kullanmam gerekse bile, yabancı anahtarların ne zaman yedeklenmesini istemediğimi hayal edemiyorum ve bu varsayılan seçenek olarak daha anlamlı olurdu.

  1. Artık kullanıcılar ile nasıl ilgilenirim ve herşeye sahip olduğumu doğrularım? Yedek dosyamı başka bir sunucuya geri yüklemek ve her şeyin çalıştığını doğrulamak istiyorum. PostgreSQL'te gerçek bir yedeğin nasıl alınacağı ve geri yükleneceği konusunda herhangi bir önerisi varsa, çok minnettar olurum.

Bir PostgreSQL sunucum vardı ama neden uygulamanın OIDvarsayılan olarak S'yi yedeklemeyeceğini hala anlayamıyorum ! Bunu isteyeceğiniz zamanın% 99,9'u gibi görünüyor.

GÜNCELLEME 1:

Postgres dokümantasyon bahseder globalsaradığım seçenek bu sürümünde varsayılan bir seçenek gibi görünüyor, ama yine de ihtiyacı -oseçeneği. Birisi doğrulayabiliyorsa veya bana tek bir veritabanını ihtiyaç duyduğu her şeyle başka bir yerde geri yüklemek için örnek bir komut verebilirse, memnun olurum.

Düzenleme: Siteden soruyu düzenleyerek bu sorunun benzersizliğini göstermesi isteniyor. Bu soru konuyu gündeme getiriyor ve yedeklemedeki OID'lerin netliğini, globals ve globals olmayanlar arasındaki farkın yanı sıra, yedeklemenin sadece yedeklemenin aksine iyi olmasını sağlamak için yapılan önerileri test ediyor. Cevaplar sayesinde yedekleme yapabildim, globals / oid'leri çözdüm ve Postgres'te cron işlerini kullanarak her gece bir test geri yükleme işlemi başlattım. Yardım için teşekkürler!


Yanıtlar:


58

PostgreSQL kümesinin tamamını pg_dumpall ile birlikte bırakabilirsiniz. That tüm veritabanları ve tek küme için tüm globaller. Sunucudaki komut satırından böyle bir şey yaparım. (Benimki varsayılan portta değil 5433 numaralı portu dinliyor.) --Clean seçeneğine ihtiyacınız olabilir veya gerekmeyebilir.

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql

Bu, küreselleri içerir - kullanıcılar ve gruplar, tablo alanları ve benzeri bilgiler.

Tek bir veritabanını yedekleyecek ve bir çizik sunucusuna taşıyacak olsaydım, veritabanını pg_dump ile döküp, globals’i iki aygıtla da dökerdim.

  • pg_dumpall --globals-onlyveya
  • pg_dumpall --roles-only (sadece rollere ihtiyacınız varsa)

bunun gibi, böyle.

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql

Çıktılar sadece metin dosyalarıdır.

Bu dosyaları farklı bir sunucuya taşıdıktan sonra, önce küreselleri, sonra da veritabanı dökümünü yükleyin.

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql

Pg_dumpall'un en azından yabancı anahtarları yedekleyeceğini düşünmüştüm, ancak bu bile bir 'seçenek' gibi görünüyor. Göre: http://www.postgresql.org/docs/9.1/static/app-pg-dumpall.html pg_dumpall ile bile olsa yabancı anahtarları yedeklemek için bir -o seçeneği kullanmam gerekiyor

Hayır, bu başvuru " Uygulamanız OID sütunlarına bir şekilde başvuruyorsa bu seçeneği kullanın (örneğin, bir yabancı anahtar kısıtında). Aksi takdirde, bu seçenek kullanılmamalıdır." (Vurgu eklendi.) Uygulamanızın OID sütunlarına gönderme olasılığı düşük . "Yabancı anahtarları yedeklemek" için bu seçeneği kullanmanıza gerek yoktur. (Editörünüzdeki veya dosya görüntüleyicinizdeki döküm dosyasını okuyun.)


3
Sandbox.sql dosyasının alındığı satırdaki veritabanı adı eksik değil mi? psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
SebK

pg_dumpall9.5 sürümü, NULLkullanırken değerleri ile düzgün çalışmadığını görür COPY. Bunun gibi birçok hata alıyorum: psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.Postgres 10 kullanmaya geri psql -f /tmp/dumpall.sql
alırken
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.