3 Ağustos 2010 Salı

Postgresql yedekleme ve geri yükleme

Postgresql'de yedek almak pgadmin aracıyla gayet kolay, ancak yedekleri geri yüklerken sorunla karşılaşabiliyoruz. Sorun şöyle oluşuyor;
pgAdmin üzerinde backup database deyince karşımıza çıkan ekranda "Plain" seçersek, yedek olarak üretilen dosyanın boyutu biraz büyük oluyor. Bu şekilde yedek alınca pg_dump bu yedekteki veri girişlerini
COPY cari_hareketler (id, tarih, islem_no, islem_turu, firma_adi, borc, alacak, aciklama, hesap_tipi) FROM stdin;
şeklinde kaydeder. postgresql sitesindeki dökümanlarda pg_restore sayfasında da "
pg_restore will not be able to load the data using COPY statements." demektedir. Yani bu şekilde alınan yedeği pgAdmin aracılığıyla restore edememekteyiz. Benzer şekilde komut satırından pg_dump komututla -Fc parametresi olmadan alınan plain formatındaki yedek te aynı şekilde kolayca geri yüklenememektedir.

Plain formatındaki yedekleri geri yüklemek için
psql -U yuksel -d muhasebe -f 30_7_2010_yedek.sql
şeklinde komut kullanmamız gerekiyor. Bu komuttaki "yuksel" kullanıcı adı, "muhasebe" geri yükleme yapılacak veritabanının adı, "30_7_2010_yedek.sql" de plain formatındaki yedek dosyamızın adı oluyor.

İlave olarak genel yedekleme komutlarından bahsetmekte de fayda var. Komut satırından;

pg_dump -U {kullanıcı_adı} {veritabanı} -f {yedekdosyasıadı.sql}
dersek plain formatta yedek alırız (copy ibareli ve pgAdmin'den geri yüklenemeyen),

pg_dump -U {kullanıcı_adı} -Fc {veritabanı} > {yedekdosyasıadı.sql}
dersek pgAdmin'den geri yüklenebilen sıkıştırılmış (custom) formatta yedek almış oluruz.

pg_restore -U {kullanıcı_adı} {veritabanı} -f {yedekdosyasıadı.sql}
dersek custom formattaki yedek dosyamızı geri yükleyebiliriz,

psql -U {kullanıcı_adı} -D {veritabanı} -f {yedekdosyasıadı.sql}
dersek plain formattaki yedeğimizi geri yükleyebiliriz.

Yedek alırken birde bütün veritabanlarının yedeğinin alınması durumu var ki ondan da kısaca örneklemelerde bulunmak gerekir. Komut satırından;
pg_dumpall > db.out

komutuyla bütün veritabanları ve objeler yedeklenir, tabi plain olarak.

psql -f db.out postgres
komutuyla da db.out yedeğinden sadece postgres veritabanı geri yüklenebilir

Hiç yorum yok: