Ideea din spatele acestei metode este de a genera un fișier text cu comenzi SQL care, atunci când este executat pe serverul de baze de date peresozdadut în aceeași stare în care a fost la momentul descărcării. PostgreSQL prevede în acest scop, program de utilitate pg_dump. Cea mai simplă utilizare a acestui program arată în felul următor:
După cum vedeți, pg_dump scrie rezultatele sale la ieșirea standard. În continuare vor fi luate în considerare, ceea ce poate fi util. În timp ce comanda de mai sus creează un fișier text, pg_dump poate crea fișiere în alte formate care permit procesarea paralelă și o gestionare mai flexibilă a proiectelor de restaurare.
Programul pg_dump este de obicei pentru aplicații client PostgreSQL (deși foarte inteligent). Acest lucru înseamnă că puteți efectua procedura de backup de la orice computer la distanță, dacă aveți acces la baza de date necesară. Dar, amintiți-vă că pg_dump nu utilizează privilegii speciale pentru munca lor. În special, este nevoie de obicei de acces de citire pentru toate tabelele pe care doriți să le descarce, astfel încât pentru a copia întreaga bază de date este aproape întotdeauna doriți să-l rulați ca bază de date rădăcină. (Dacă nu aveți drepturi suficiente să susțină întreaga bază de date, cu toate acestea, vă puteți face o copie de rezervă a acelei părți a bazei de date, accesul la care aveți, utilizând parametri, cum ar fi schema tabelei sau -N -t.)
Se specifică serverele care ar trebui să fie conectate pg_dump programului. Puteți utiliza linia de comandă argumente, -h și portul de server -p. În mod implicit, serverul selectat localhost, sau valoarea specificată în mediul PGHOST variabila. În mod similar, portul implicit este specificat în mediul PGPORT variabilă. și în cazul în care nu este specificat, portul specificat în mod implicit atunci când compilarea. (Pentru comoditate în compilarea serverul este setat de obicei aceeași valoare ca implicit.)
Ca orice altă aplicație client PostgreSQL. pg_dump implicit va conecta la baza de date cu un nume de utilizator care se potrivește cu numele sistemului de operare al utilizatorului curent. Pentru a trece peste numele sau adăugați -U. sau pentru a seta mediul PGUSER variabila. Amintiți-vă că pg_dump se conectează la server prin mecanismele obișnuite de autentificare a clientului (care sunt descrise în capitolul 19).
Pg_dump avantaj important în comparație cu alte metode de backup, descrise mai jos, este că producția de pg_dump pot fi încărcate, de obicei, în versiuni mai noi ale PostgreSQL. în timp ce rezervă la nivelul sistemului de fișiere și arhivare continuă dependentă rigid pe versiunea serverului. De asemenea, numai metoda folosind pg_dump va rula atunci când baza de date este mutat într-o altă arhitectură mașină, de exemplu, atunci când se deplasează de la 32 de biți la versiunea pe 64 de biți a serverului.
Haldele generat pg_dump. Ele sunt consecvente la nivel intern, care este, groapa de gunoi este un instantaneu al bazei de date la momentul pg_dump sale de lansare. pg_dump nu blochează alte operațiuni pe baza de date la momentul muncii lor. (Excepțiile sunt operațiuni care au nevoie de blocare exclusivă, cum ar fi cele mai multe forme de comandă ALTER TABLE.)
Fișierele de text create de pg_dump sunt destinate a fi citite programul psql. Vedere generală a comenzii pentru a restabili groapa de gunoi:
în cazul în care input_file - un fișier care conține rezultatul comenzii pg_dump. Baza de date specificată de parametrul database_name. nu va fi creată de această comandă, așa că trebuie să-l creați-vă dintr-o bază de date template0 înainte de a începe psql (de exemplu, folosind createdb -T template0 database_name echipa). Programul psql primește parametri care indică serverul la care vă conectați, și numele utilizatorului, cum ar fi pg_dump. Pentru mai multe informații, consultați Ajutorul pentru pg_restore. Copii ale textului nu este restabilită utilitate pg_restore.
Înainte de a restaura un SQL-dump toți utilizatorii care detineau obiecte sau au dreptul de a se opune la baza de date neîncărcat trebuie să existe deja. În cazul în care nu fac, în reducerea erorilor va recrea obiectele cu proprietarii și / sau drepturi originale. (Uneori, acest lucru este rezultatul dorit, dar de obicei nu).
În mod implicit, în cazul în care se produce eroarea SQL, programul psql continuă. Dacă executați psql cu ON_ERROR_STOP set de variabile. acest comportament se va schimba și psql se va încheia cu codul 3 în cazul unei erori SQL:
În orice caz, veți primi doar parțial restaurate de baze de date. Alternativ, puteți specifica faptul că întreaga groapa ar trebui să fie restabilită într-o singură tranzacție, astfel încât restaurarea unui complet executat sau anulat complet. Activare mod este activ, care trece psql argument -1 sau --single-tranzacție. Prin alegerea acestei opțiuni, rețineți că, chiar și o mică greșeală poate duce la o recuperare derulare înapoi, care ar putea dura mai multe ore. Cu toate acestea, ea poate fi încă de preferat pentru a curăța manual o bază de date complexă, după o groapa parțial restaurată.
Important: urinale, care dă pg_dump. cuprinde determinarea template0 relative. Acest lucru înseamnă că orice limbi, proceduri și așa mai departe. N. adăugate la baza de date prin intermediul template1. pg_dump, de asemenea, descărca groapa. Ca urmare, dacă utilizați un template1 de recuperare modificat. trebuie să creați o bază de date goală din template0. așa cum se arată în exemplul de mai sus.
După restaurarea unei copii de rezervă are sens pentru a rula Analyze fiecare bază de date, astfel încât optimizatorul de interogare a primit statistici utile; Pentru detalii, consultați subsecțiunea 23.1.3 și 23.1.6 subsecțiune. Alte sfaturi pentru încărcarea eficientă cantități mari de date în PostgreSQL pot fi găsite în secțiunea 14.4.
Programul pg_dump încarcă doar o singură bază de date la un moment dat și nu include informații cu privire la groapa de roluri și spațiu tabelă (ca acest nivel de grup de informații, mai degrabă decât baza de date în sine). Pentru comoditate, de a crea o groapa a tuturor bazelor de date de conținut este furnizat de program pg_dumpall cluster. ceea ce face o copie de rezervă a tuturor bazelor de date cu dispersie și a menține un nivel de date de cluster, cum ar fi rolul și definirea spațiului tabelă. Utilizare simplă această comandă:
Copia rezultată poate fi restaurată cu psql.
(În principiu, aici, ca baza de date inițială, puteți specifica numele oricărei baze de date existente, dar dacă descărcați o copie într-un cluster gol, de obicei, trebuie sa folositi un postgres). Restaurarea groapa de gunoi, care a emis pg_dumpall. Ar trebui să fie întotdeauna superutilizatorul, deoarece acestea sunt necesare pentru a restabili informațiile despre rolurile și TABLESPACES. Dacă utilizați un spațiu tabelă, asigurați-vă că calea către spațiul tabelă în groapa de gunoi corespunde noului mediu.
pg_dumpall oferă instrucțiuni care re-crea rolul, spațiile de tabelă și a bazei de date goale și apoi solicită pg_dump pentru fiecare bază de date. Astfel, cu toate că fiecare bază de date va fi consistente intern, starea diferitelor baze de date nu vor fi sincron.
Numai datele de cluster la nivel mondial pot fi descărcate, transferate --globals numai pg_dumpall cheie. Este necesar să copiați întregul cluster-ul atunci când pg_dump efectuate pentru baze de date individuale.
Unele sisteme de operare impune o limită pentru dimensiunea maximă a fișierului, ceea ce duce la probleme atunci când crearea de fișiere mari, folosind pg_dump. Din fericire, pg_dump poate scrie la ieșirea standard, astfel încât să puteți utiliza instrumente standard Unix, pentru a evita eventualele probleme. Iată câteva metode posibile:
Utilizați gunoiști comprimate. Puteți utiliza programul de compresie preferat, de exemplu, gzip.
Apoi, descărcați groapa de comprimat cu comanda:
Utilizați divizat. Echipa divizat poate rupe datele de ieșire în fișiere mai mici, a căror dimensiune satisfac constrângerea sistemului de fișiere care stau la baza. De exemplu, pentru a obține piese de la 1 megabyte:
Recuperează-le, puteți:
Utilizați speciale benă de format pg_dump. În cazul în care ansamblul a fost conectat PostgreSQL biblioteca zlib. benă într-un format special va fi scris într-un fișier într-o formă comprimată. În acest format dimensiunea fișierului haldei va fi aproape de mărimea obținută folosind gzip. dar este mai bine, pentru că vă permite să restaurați tabelul selectiv. Următoarea comandă descarcă baza de date într-un format special:
Dump într-un format special, nu este un script pentru psql, și trebuie să fie restaurate folosind comanda pg_restore. de exemplu:
Pentru detalii, consultați ajutorul pentru comenzi pg_dump și pg_restore.
Pentru foarte mari baze de date ar putea avea nevoie de a combina split cu una dintre celelalte două metode.
Utilizați posibilitatea de descărcare în paralel pg_dump. Pentru a accelera descărcarea unei baze de date de mare, puteți utiliza modul de descărcare în paralel în pg_dump. Acest lucru va fi descărcat în același timp, mai mult de un tabel. Controlați numărul de locuri de muncă concurente permite parametrul -j. încărcare paralelă acceptate numai formatul de fișier în directorul.
Puteți restaura, de asemenea, o copie în paralel folosind pg_restore -j. Acest lucru este acceptat pentru toate fișier într-un format de director sau format special, chiar dacă fișierul nu a fost creat comanda pg_dump -j.