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.)



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow