Tech Tips: Hoe maak ik een back-up van en herstel ik de Postgres-database?
·
19 jun 2013

Belangrijkste punten
PostgreSQL-back-ups kunnen zich richten op een enkele tabel, een enkele database of alle databases, afhankelijk van uw behoeften.
pg_dumpcreëert een SQL-tekstbestand dat de DDL en gegevens bevat die nodig zijn om de doel-tabel of database opnieuw te maken.pg_dumpallmaakt een back-up van elke database op het Postgres-instance.Herstel wordt uitgevoerd met
psql, die de SQL-dump terug in de doel-database uitvoert.Herstel op tabelniveau vereist de zekerheid dat de tabel niet al bestaat om conflicten te vermijden.
Bij het maken van back-ups van individuele tabellen, let op relationele afhankelijkheden.
Dumps kunnen worden genomen van lokaal en worden hersteld naar remote Postgres-instances.
Back-ups omvatten
CREATE,ALTER, enCOPY-opdrachten, afhankelijk van wat wordt geëxporteerd.De juiste back-upstrategie hangt af van het begrijpen van tabelrelaties, het gebruik van schema's en implementatieomgevingen.
Zorg altijd voor gegevensintegriteit door back-ups te maken die verwijzingen naar tabellen bevatten wanneer dat nodig is.
Q&A Hoogtepunten
Wat doet pg_dump eigenlijk?
pg_dumpgenereert een tekstgebaseerd SQL-bestand dat de volledige reeks opdrachten bevat die nodig zijn om een tabel of database precies te recreëren zoals deze bestond op het moment van de back-up.Kan ik slechts één tabel back-uppen in plaats van een volledige database?
Ja. Gebruik
pg_dump --table TABLENAMEom een specifieke tabel te exporteren. Als er tabellen met dezelfde naam in verschillende schema's bestaan, gebruik--schemaom het juiste schema te specificeren.Moet ik me zorgen maken over gerelateerde tabellen bij het back-uppen van een enkele tabel?
Absoluut. PostgreSQL is relationeel, dus andere tabellen kunnen verwijzen naar degene die je aan het back-uppen bent. Als je slechts één tabel zonder gerelateerde herstelt, kun je de referentiële integriteit verbreken.
Hoe maak ik een back-up van een volledige database?
Voer een commando uit zoals:
pg_dump -U <user> <database> -f <output.sql>Dit exporteert alle tabellen, schema-definities, indexen en gegevens voor die database.
Wat doet pg_dumpall?
pg_dumpallmaakt een back-up van elke database op de server in één enkel SQL-bestand. Het is nuttig bij het migreren of het maken van een momentopname van een volledige Postgres-instantie.Kan ik een tabel herstellen in een bestaande database?
Ja. Gebruik
psql -U <gebruiker> -f <bestand.sql> <database>.Maar zorg ervoor dat de tabel niet al bestaat — anders krijgt u foutmeldingen 'bestaat al' tijdens het herstellen.
Wat gebeurt er tijdens een volledige database restore?
Het herstelbestand draait:
CREATE TABLEALTER TABLECOPY(voor tabelgegevens)
waardoor de database wordt teruggebracht naar de exacte staat op het moment van de dump.
Kan ik herstellen naar een andere server dan de server waarvan ik een back-up heb gemaakt?
Ja. Dumps zijn draagbaar. U kunt lokaal een back-up maken en deze herstellen naar een externe Postgres-instantie, mits de versies compatibel zijn.
Heeft pg_dump invloed op de draaiende database?
Nee. Het werkt via SQL-query's en vergrendelt de hele database niet. Het legt veilig een consistente momentopname vast.
Hoe herstel ik alle databases van een pg_dumpall-bestand?
Gebruik:
psql -U <user> -f all_dump.sqlDit recreëert elke database die in de dump wordt gevonden.
Ten eerste, een disclaimer. Dit bericht biedt een algemene handleiding over hoe een Postgres Database Tabel te back-uppen. De verstrekte voorbeelden verwijzen niet naar een specifieke tabel of database. Als je een specifieke tabel probeert te back-uppen, moet je ook tabellen back-uppen die naar de originele tabellen verwijzen. Aangezien Postgres een relationele database is, zullen er altijd verwijzingen zijn tussen een aantal tabellen.
Dit is een 'hoe te' document dat alleen voorbeeldopdrachten geeft, hoe het daadwerkelijk wordt uitgevoerd hangt volledig af van de persoon die het doet en specifieke use-cases. Zorg er altijd voor dat de integriteit van de gegevens die je probeert te back-uppen behouden blijft. Het back-uppen van de hele database is altijd een veilige optie, maar bij het back-uppen van specifieke tabellen moet men voorzichtig zijn.
SQL-dump/pg_dump:
Het idee achter de SQL-dump methode is om een tekstbestand te genereren met SQL-commando's die, wanneer teruggegeven aan de server, de database in dezelfde staat zullen recreëren als op het moment van de dump. PostgreSQL biedt het hulpprogramma pg_dump voor dit doel.
pg_dump is een effectief en uitgebreid hulpmiddel om Postgres database back-ups te maken en de back-ups te gebruiken om de postgres database te herstellen. Het is echter niet beperkt tot alleen de database. We kunnen pg_dump gebruiken om tabellen te back-uppen en die vervolgens te gebruiken om individuele tabellen te herstellen. Met pg_dump kunt u de lokale database back-uppen en deze herstellen op een externe database.
Hoe een Postgres Database te Backup:
Hoe een Postgres Database te herstellen
Overzicht van Postgres Herstelopties
Herstelbereik | Gebruikte tool | Invoerbestand | Belangrijkste vereiste | Veelvoorkomende valkuil |
|---|---|---|---|---|
Enkele tabel | psql | Tabel dump | Tabel mag nog niet bestaan | “bestaat al” fouten |
Enkele database | psql | Database dump | Doeldatabase moet bestaan | Onbedoelde gegevens overschrijven |
Alle databases | psql | Volledige dump | Superuser toegang aanbevolen | Meer herstellen dan bedoeld |
Herstel een Postgres-tabel:
$ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql peHet bovenstaande commando zal de tabel installeren die werd geback-upt in het ms_table.sql-bestand naar de 'pe'-database. Zorg ervoor dat deze tabel nog niet bestaat, anders krijgt u een reeks 'bestaat al' fouten. Deze opdracht maakt de tabel aan en exporteert alle gegevens naar de nieuw aangemaakte tabel.
Herstel een Postgres-database:
$ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sqlNet als bij het herstellen van de tabel, kunnen we de bovenstaande opdracht gebruiken om de complete database te herstellen. Hier herstellen we de 'pe'-database met behulp van het bestand pe_dump.sql dat we hadden gemaakt tijdens het back-uppen van de database in de bovenstaande Back-up sectie.
Herstel alle databases:
$ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sqlHerstel alle databases met behulp van de bovenstaande opdracht. 'all_dump.sql' was het bestand dat werd gecreëerd met behulp van
pg_dumpall. De bovenstaande opdracht zal ons alle Postgres-databases geven in de exacte staat waarin ze verkeerden toen er een dump werd gemaakt van de originele databaseserver.



