CodeGym /Kurslar /SQL SELF /pg_restore ilə məlumatların bərpası

pg_restore ilə məlumatların bərpası

SQL SELF
Səviyyə , Dərs
Mövcuddur

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ər pg_dump ilə custom və ya directory formatı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

  1. 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
  1. 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
  1. 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
  1. 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 --clean istifadə et.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION