postgresql
Backup en herstellen
Zoeken…
Opmerkingen
Een back-up van het bestandssysteem maken in plaats van pg_dumpall
en pg_dump
Het is heel belangrijk dat als u dit gebruikt, u de functie pg_start_backup()
ervoor en de functie pg_stop_backup()
daarna pg_stop_backup()
. Het maken van back-ups van het bestandssysteem is anders niet veilig; zelfs een ZFS- of FreeBSD-snapshot van het bestandssysteem waarvan een back-up is gemaakt zonder die functieaanroepen, plaatst de database in de herstelmodus en kan transacties verliezen.
Ik zou vermijden om back-ups van het bestandssysteem te maken in plaats van reguliere Postgres-back-ups, zowel om deze reden als omdat Postgres-back-upbestanden (vooral in het aangepaste formaat) extreem veelzijdig zijn in het ondersteunen van alternatieve herstelacties. Omdat het afzonderlijke bestanden zijn, zijn ze ook minder gedoe om te beheren.
Een back-up maken van één database
pg_dump -Fc -f DATABASE.pgsql DATABASE
De -Fc
selecteert de "aangepaste back-upindeling" die u meer kracht geeft dan ruwe SQL; zie pg_restore
voor meer informatie. Als u een vanille-SQL-bestand wilt, kunt u dit in plaats daarvan doen:
pg_dump -f DATABASE.sql DATABASE
of zelfs
pg_dump DATABASE > DATABASE.sql
Back-ups herstellen
psql < backup.sql
Een veiliger alternatief gebruikt -1
om het herstel in een transactie te verpakken. De -f
geeft de bestandsnaam aan in plaats van shell-omleiding te gebruiken.
psql -1f backup.sql
Bestanden in aangepast formaat moeten worden hersteld met behulp van pg_restore
met de optie -d
om de database op te geven:
pg_restore -d DATABASE DATABASE.pgsql
Het aangepaste formaat kan ook worden teruggezet naar SQL:
pg_restore backup.pgsql > backup.sql
Het gebruik van het aangepaste formaat wordt aanbevolen omdat u kunt kiezen welke dingen u wilt herstellen en optioneel parallelle verwerking wilt inschakelen.
Mogelijk moet u een pg_dump doen, gevolgd door een pg_restore als u een upgrade uitvoert van een postgresql-release naar een nieuwere.
Een back-up maken van het hele cluster
$ pg_dumpall -f backup.sql
Dit werkt achter de schermen door voor elke database eenmaal meerdere verbindingen met de server te maken en daarop pg_dump
te voeren.
Soms kom je in de verleiding om dit als cron-taak in te stellen, dus wil je de datum zien waarop de back-up is genomen als onderdeel van de bestandsnaam:
$ postgres-backup-$(date +%Y-%m-%d).sql
Houd er echter rekening mee dat dit dagelijks grote bestanden kan opleveren. Postgresql heeft een veel beter mechanisme voor reguliere back-ups - WAL-archieven
De uitvoer van pg_dumpall is voldoende om te herstellen naar een identiek geconfigureerde Postgres-instantie, maar de configuratiebestanden in $PGDATA
( pg_hba.conf
en postgresql.conf
) maken geen deel uit van de back-up, dus u moet er een back-up van maken.
postgres=# SELECT pg_start_backup('my-backup');
postgres=# SELECT pg_stop_backup();
Om een back-up van het bestandssysteem te maken, moet u deze functies gebruiken om ervoor te zorgen dat Postgres in een consistente staat is terwijl de back-up wordt voorbereid.
Kopiëren gebruiken om te importeren
Gegevens van een CSV-bestand naar een tabel kopiëren
COPY <tablename> FROM '<filename with path>';
Te voegen in tabel user
van een bestand met de naam user_data.csv
geplaatst binnen /home/user/
:
COPY user FROM '/home/user/user_data.csv';
Om gegevens van een gescheiden bestand naar een tabel te kopiëren
COPY user FROM '/home/user/user_data' WITH DELIMITER '|';
Opmerking: Bij afwezigheid van de optie with delimiter
, is het standaardscheidingsteken komma ,
Om de kopregel te negeren tijdens het importeren van het bestand
Gebruik de optie Koptekst:
COPY user FROM '/home/user/user_data' WITH DELIMITER '|' HEADER;
Opmerking: als gegevens tussen aanhalingstekens staan, zijn standaard gegevens met aanhalingstekens dubbel aanhalingstekens. Als de gegevens met een ander teken worden geciteerd, gebruikt u de optie QUOTE
; deze optie is echter alleen toegestaan bij gebruik van het CSV-formaat.
Kopiëren gebruiken om te exporteren
Tabel naar standaard o / p kopiëren
COPY <tablename> TO STDOUT (DELIMITER '|');
Tabelgebruiker exporteren naar standaarduitgang:
KOPIEER gebruiker NAAR STDOUT (DELIMITER '|');
Tabel naar bestand kopiëren
KOPIE gebruiker VAN '/ home / user / user_data' MET DELIMITER '|';
De uitvoer van SQL-instructies naar bestand kopiëren
COPY (sql statement) NAAR '<bestandsnaam met pad>';
KOPIE (SELECT * VAN gebruiker WAAR gebruikersnaam ZOALS 'A%') NAAR '/ home / user / user_data';
Kopiëren naar een gecomprimeerd bestand
KOPIEER NAAR PROGRAMMA 'gzip> /home/user/user_data.gz';
Hier wordt het programma gzip uitgevoerd om de gebruikerstabelgegevens te comprimeren.
Psql gebruiken om gegevens te exporteren
Gegevens kunnen worden geëxporteerd met de opdracht copy of door gebruik te maken van de opdrachtregelopties van de opdracht psql.
CSV-gegevens exporteren van tabelgebruiker naar CSV-bestand:
psql -p \<port> -U \<username> -d \<database> -A -F<delimiter> -c\<sql to execute> \> \<output filename with path>
psql -p 5432 -U postgres -d test_database -A -F, -c "select * from user" > /home/user/user_data.csv
Hier is de combinatie van -A en -F voldoende.
-F
is om scheidingsteken op te geven
-A or --no-align
Schakelt over naar niet-uitgelijnde uitvoermodus. (De standaard uitvoermodus is anders uitgelijnd.)