Sən, məsuliyyətli database administratoru kimi, backup yaratdıqdan sonra, əsas məqam gəlir: məlumatların bərpası. Və bu anda səhnəyə bu epizodun əsas qəhrəmanı çıxır — pg_restore komandası. Əgər pg_dump backup yaratmaq üçün sənin superqəhrəmanın idisə, pg_restore onun partnyorudur, backupdan məlumatları "dirildən" dostundur.
pg_restore pg_dump ilə binary formatlarda (custom və ya directory) yaradılmış fayllardan məlumatların bərpası üçün istifadə olunur. Əgər hansısa səbəbdən database-in korlanıbsa və ya məlumatları yeni serverə köçürmək istəyirsənsə, bu alət sənin əvəzolunmaz köməkçin olacaq.
Niyə sənə pg_restore lazımdır:
- O, həm bütün database-i, həm də onun ayrı-ayrı hissələrini (sxem, cədvəllər, məlumatlar) bərpa etməyə imkan verir.
- Bu, bərpa prosesinə detallı nəzarət etmək lazım olan çətin ssenarilər üçün güclü bir alətdir.
Əsas komanda sintaksisi
pg_restore ilə işə başlamaq üçün əsas komanda sintaksisi belədir:
pg_restore -U username -d database_name backup_file.dump
Komandanın parametrləri:
-U username: PostgreSQL istifadəçi adını göstərir.-d database_name: məlumatların bərpa olunacağı database-in adı.backup_file.dump: əvvəllərpg_dumpiləcustomvə yadirectoryformatında yaradılmış backup faylı
Məsələn, əgər university database-ni backup.dump faylından, postgres istifadəçisi adından bərpa etmək istəyirsənsə, komanda belə olacaq:
pg_restore -U postgres -d university backup.dump
Bu komandanı işə salanda pg_restore bərpa prosesinə başlayacaq və məlumatları database-ə qaytaracaq!
Backup tipləri və uyğunluq
Bütün backup-lar eyni deyil. Yəqin yadındadır ki, pg_dump ilə backup yaradanda müxtəlif formatlar seçə bilərdik. Onların bəziləri pg_restore ilə uyğun gəlir, bəziləri isə yox.
| Backup formatı | Təsvir | pg_restore tərəfindən dəstəklənir |
|---|---|---|
plain (mətn) |
Bərpa əmrlərini saxlayan SQL-skript. | ❌ Yox |
custom |
PostgreSQL-in proprietary formatında sıxılmış backup. | ✅ Bəli |
directory |
Bir neçə fayldan ibarət qovluq şəklində saxlanılan backup. | ✅ Bəli |
tar |
TAR formatında arxiv. | ✅ Bəli |
Diqqət et ki, mətn backup-ları (plain) üçün pg_restore istifadə edə bilməzsən. Belə faylları əl ilə psql komandası ilə bərpa edirlər. Məsələn:
psql -U username -d database_name -f backup.sql
pg_restore-un çevikliyi: bərpa parametrləri
pg_restore-un bu qədər məşhur olmasının əsas səbəblərindən biri də onun çevikliyidir. Onun köməyi ilə təkcə bütün database-i deyil, ayrı-ayrı hissələri də bərpa edə bilərsən.
Məlumat strukturunun bərpası. Əgər yalnız database-in strukturunu (cədvəl sxemləri, indekslər, trigger-lər və s.) bərpa etmək istəyirsənsə, --schema-only flag-ından istifadə et:
pg_restore -U postgres -d university --schema-only backup.dump
Bu, database-in strukturunu analiz etmək və ya "boş" bir nüsxə yaratmaq istəyəndə faydalıdır.
Yalnız məlumatların bərpası. Əgər səni yalnız məlumatlar maraqlandırırsa (struktur olmadan), --data-only parametrindən istifadə et:
pg_restore -U postgres -d university --data-only backup.dump
Bu yanaşma, struktur artıq mövcuddursa, amma cədvəllərin içini bərpa etmək lazımdırsa, işə yarayır.
Bərpadan əvvəl təmizləmə. Bəzən cədvəllər və ya sxemlər artıq database-də mövcud olur. Onları bərpadan əvvəl silmək üçün --clean flag-ından istifadə et:
pg_restore -U postgres -d university --clean backup.dump
Bu parametr ilə pg_restore əvvəlcə mövcud obyektləri siləcək, sonra backup-dan məlumatları bərpa edəcək.
Obyektlərin filtrasiyası. pg_restore backup-dan hansı obyektləri bərpa etmək istədiyini seçməyə imkan verir. Bunun üçün --table flag-ı istifadə olunur:
pg_restore -U postgres -d university --table=students backup.dump
Bu nümunədə yalnız students cədvəli bərpa olunacaq.
SQL-i konsolda göstərmək
Bərpa zamanı nəyin icra olunacağını görmək, amma database-i dərhal dəyişmək istəmirsənsə, --list flag-ından istifadə et:
pg_restore -l backup.dump
Və icra olunacaq SQL əmrlərini mətn şəklində almaq üçün --verbose əlavə et:
pg_restore -U postgres --verbose --schema-only backup.dump
Bərpa nümunələri
- Database-in tam bərpası.
Ən tipik ssenari: backup-dan database-i tam bərpa etmək istəyirsən:
pg_restore -U postgres -d university backup.dump
- Konkret cədvəlin bərpası.
Məsələn, yalnız courses cədvəlindəki məlumatları itirmisənsə, onu ayrıca bərpa et:
pg_restore -U postgres -d university --table=courses backup.dump
- Database sxeminin bərpası.
Yalnız cədvəllərin strukturunu (məlumatlar olmadan) bərpa etmək üçün:
pg_restore -U postgres -d university --schema-only backup.dump
- Obyektlərin yenidən yaradılması ilə bərpa.
Mövcud məlumatları yenidən yazmaq lazımdırsa:
pg_restore -U postgres -d university --clean backup.dump
Bərpa zamanı tipik səhvlər və onların qarşısını almaq
Versiya uyğunsuzluğu. Əgər backup-ı bir PostgreSQL versiyasında yaradıb, başqa (xüsusilə köhnə) versiyada bərpa etməyə çalışırsansa, uyğunsuzluq səhvləri ilə qarşılaşa bilərsən. Həll: backup və bərpa üçün eyni PostgreSQL versiyasından istifadə etməyə çalış.
"Role does not exist" səhvi. Əgər backup-da istifadə olunan rollar (istifadəçilər) bərpa olunan serverdə yoxdursa, bu səhv çıxacaq. Həll: əvvəlcədən lazım olan rolları yeni serverdə yarat.
"Table already exists" səhvi. Bu səhv, bərpa etmək istədiyin cədvəl artıq mövcuddursa çıxır. Konfliktin qarşısını almaq üçün
--cleanistifadə et.
GO TO FULL VERSION