CodeGym /Kursy /SQL SELF /Przywracanie danych z pg_restore

Przywracanie danych z pg_restore

SQL SELF
Poziom 43 , Lekcja 3
Dostępny

Po tym, jak jako ogarnięty admin bazy danych zrobiłeś backup, nadchodzi chwila prawdy: przywracanie danych. I tu na scenę wchodzi główny bohater tego odcinka — komenda pg_restore. Jeśli pg_dump był twoim superbohaterem od backupów, to pg_restore to jego ziomek, który wskrzesza dane z utworzonych kopii zapasowych.

pg_restore służy do przywracania danych z plików utworzonych przez pg_dump w formatach binarnych (custom albo directory). Jeśli z jakiegoś powodu twoja baza została uszkodzona albo chcesz przenieść dane na nowy serwer, to narzędzie będzie twoim niezastąpionym kompanem.

Po co ci pg_restore:

  • Pozwala przywrócić całą bazę danych albo tylko jej wybrane części (schemat, tabele, dane).
  • To potężne narzędzie do ogarniania skomplikowanych scenariuszy przywracania, gdzie musisz mieć pełną kontrolę nad procesem.

Podstawowa składnia komendy

Praca z pg_restore zaczyna się od podstawowej składni:

pg_restore -U username -d database_name backup_file.dump

Parametry komendy:

  • -U username: podaje nazwę użytkownika PostgreSQL do połączenia.
  • -d database_name: nazwa bazy, do której będą przywracane dane.
  • backup_file.dump: plik backupu utworzony wcześniej przez pg_dump w formacie custom albo directory

Na przykład, jeśli chcesz przywrócić bazę university z pliku backup.dump jako użytkownik postgres, komenda wygląda tak:

pg_restore -U postgres -d university backup.dump

Po odpaleniu tej komendy pg_restore zacznie proces przywracania i wrzuci dane do bazy!

Typy backupów i ich kompatybilność

Nie wszystkie backupy są takie same. Może pamiętasz, że przy robieniu backupu przez pg_dump mogliśmy wybrać różne formaty. Niektóre z nich są kompatybilne z pg_restore, a inne nie.

Format backupu Opis Obsługiwany przez pg_restore
plain (tekstowy) SQL-skrypt zawierający komendy przywracania. ❌ Nie
custom Skompresowany backup w własnym formacie PostgreSQL. ✅ Tak
directory Backup zapisany jako katalog z wieloma plikami. ✅ Tak
tar Archiwum w formacie TAR. ✅ Tak

Pamiętaj, że dla backupów tekstowych (plain) nie możesz użyć pg_restore. Takie pliki przywraca się ręcznie przez psql. Na przykład:

psql -U username -d database_name -f backup.sql

Elastyczność pg_restore: parametry przywracania

Jednym z głównych powodów, dla których pg_restore jest tak popularny, jest jego elastyczność. Dzięki niemu możesz przywrócić nie tylko całą bazę, ale też wybrane fragmenty.

Przywracanie struktury danych. Jeśli chcesz przywrócić tylko strukturę bazy (schematy tabel, indeksy, triggery itd.), użyj flagi --schema-only:

pg_restore -U postgres -d university --schema-only backup.dump

To przydatne, jeśli chcesz przeanalizować strukturę bazy albo zrobić "pustą" kopię.

Przywracanie tylko danych. Jeśli interesują cię tylko dane (bez struktury), użyj parametru --data-only:

pg_restore -U postgres -d university --data-only backup.dump

Taki sposób się przydaje, jeśli struktura już istnieje, ale musisz przywrócić zawartość tabel.

Czyszczenie przed przywracaniem. Czasem tabele albo schematy już są w bazie. Żeby je usunąć przed przywróceniem, użyj flagi --clean:

pg_restore -U postgres -d university --clean backup.dump

Z tym parametrem pg_restore najpierw usunie istniejące obiekty, a potem przywróci dane z backupu.

Filtrowanie obiektów. pg_restore pozwala wybrać, które obiekty z backupu chcesz przywrócić. Do tego służy flaga --table:

pg_restore -U postgres -d university --table=students backup.dump

Ten przykład przywróci tylko tabelę students.

Wyświetlanie SQL na konsoli

Jeśli chcesz zobaczyć, co dokładnie zostanie wykonane podczas przywracania, ale nie chcesz od razu zmieniać bazy, użyj flagi --list:

pg_restore -l backup.dump

A żeby dostać tekstowe komendy SQL, które będą wykonane, dodaj --verbose:

pg_restore -U postgres --verbose --schema-only backup.dump

Przykłady przywracania

  1. Pełne przywrócenie bazy danych.

Najbardziej klasyczny scenariusz: chcesz całkowicie przywrócić bazę z backupu:

pg_restore -U postgres -d university backup.dump
  1. Przywracanie konkretnej tabeli.

Na przykład, jeśli straciłeś dane tylko z tabeli courses, przywróć ją osobno:

pg_restore -U postgres -d university --table=courses backup.dump
  1. Przywracanie schematu bazy danych.

Żeby przywrócić tylko strukturę tabel (bez danych):

pg_restore -U postgres -d university --schema-only backup.dump
  1. Przywracanie z ponownym tworzeniem obiektów.

Jeśli musisz nadpisać istniejące dane:

pg_restore -U postgres -d university --clean backup.dump

Typowe błędy przy przywracaniu i jak ich uniknąć

  • Niekompatybilność wersji. Jeśli robisz backup na jednej wersji PostgreSQL i próbujesz przywrócić go na innej (szczególnie starszej), możesz trafić na błędy niekompatybilności. Rozwiązanie: staraj się używać tych samych wersji PostgreSQL do backupu i przywracania.

  • Błąd "Role does not exist". Jeśli w backupie są role (użytkownicy), których nie ma na serwerze docelowym, dostaniesz taki błąd. Rozwiązanie: wcześniej utwórz potrzebne role na nowym serwerze.

  • Błąd "Table already exists". Ten błąd pojawia się, jeśli próbujesz przywrócić tabelę, która już istnieje. Użyj --clean, żeby uniknąć konfliktu.

2
Zadanie
SQL SELF, poziom 43, lekcja 3
Niedostępne
Przywracanie danych tylko jednej tabeli
Przywracanie danych tylko jednej tabeli
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION