Sök…


Anmärkningar

Säkerhetskopiera filsystemet istället för att använda pg_dumpall och pg_dump

Det är väldigt viktigt att om du använder den här, anropar pg_start_backup() funktionen pg_start_backup() före och pg_stop_backup() efter. Att göra säkerhetskopior av filsystem är inte säkert annars; till och med en ZFS- eller FreeBSD-stillbild av filsystemet som säkerhetskopieras utan dessa funktionssamtal kommer att placera databasen i återställningsläge och kan förlora transaktioner.

Jag skulle undvika att göra filsystem-säkerhetskopior istället för vanliga Postgres-säkerhetskopior, både av detta skäl och eftersom Postgres-säkerhetskopior (särskilt i det anpassade formatet) är extremt mångsidiga för att stödja alternativa återställningar. Eftersom de är enstaka filer, är de också mindre krångel att hantera.

Säkerhetskopiera en databas

pg_dump -Fc -f DATABASE.pgsql DATABASE

-Fc väljer "anpassat reservformat" som ger dig mer kraft än rå SQL; se pg_restore för mer information. Om du vill ha en vanilj SQL-fil kan du göra det istället:

pg_dump -f DATABASE.sql DATABASE

eller ens

pg_dump DATABASE > DATABASE.sql

Återställa säkerhetskopior

psql < backup.sql

Ett säkrare alternativ använder -1 att radera återställningen i en transaktion. -f anger filnamnet snarare än att använda skalomföring.

psql -1f backup.sql

Anpassade formatfiler måste återställas med pg_restore med alternativet -d att ange databasen:

pg_restore -d DATABASE DATABASE.pgsql

Det anpassade formatet kan också konverteras tillbaka till SQL:

pg_restore backup.pgsql > backup.sql

Användning av det anpassade formatet rekommenderas eftersom du kan välja vilka saker som ska återställas och eventuellt möjliggöra parallellbehandling.

Du kan behöva göra en pg_dump följt av en pg_restore om du uppgraderar från en postgresql-version till en nyare.

Säkerhetskopiera hela klustret

$ pg_dumpall -f backup.sql

Detta fungerar bakom kulisserna genom att göra flera anslutningar till servern en gång för varje databas och köra pg_dump på den.

Ibland kan du bli frestad att ställa in detta som ett cron-jobb, så du vill se det datum då säkerhetskopian togs som en del av filnamnet:

$ postgres-backup-$(date +%Y-%m-%d).sql

Observera dock att detta kan producera stora filer dagligen. Postgresql har en mycket bättre mekanism för regelbundna säkerhetskopior - WAL-arkiv

Utgången från pg_dumpall är tillräcklig för att återställa till en identiskt konfigurerad Postgres-instans, men konfigurationsfilerna i $PGDATA ( pg_hba.conf och postgresql.conf ) är inte en del av säkerhetskopian, så du måste säkerhetskopiera dem separat.

postgres=# SELECT pg_start_backup('my-backup');
postgres=# SELECT pg_stop_backup();

För att ta en filsystem-säkerhetskopia måste du använda dessa funktioner för att säkerställa att Postgres är i ett enhetligt tillstånd medan säkerhetskopian är förberedd.

Använd kopia för att importera

För att kopiera data från en CSV-fil till en tabell

COPY <tablename> FROM '<filename with path>';

För att infoga i user från en fil med namnet user_data.csv placerad inuti /home/user/ :

COPY user FROM '/home/user/user_data.csv';

För att kopiera data från rörseparerad fil till tabell

COPY user FROM '/home/user/user_data' WITH DELIMITER '|';

Obs: I avsaknad av alternativet with delimiter är standardavgränsaren komma ,

Att ignorera rubrikraden vid import av fil

Använd alternativet Header:

COPY user FROM '/home/user/user_data' WITH DELIMITER '|' HEADER;

Obs! Om data är citerade, är datatecken som standard citationstecken dubbelcitationstecken. Om uppgifterna är citerade med något annat tecken, använd alternativet QUOTE ; men detta alternativ är endast tillåtet när du använder CSV-format.

Använd kopia för att exportera

För att kopiera tabell till standard o / p

KOPIERA <tablename> TO STDOUT (DELIMITER '|');

Så här exporterar du tabellanvändare till Standarduppsättning:

KOPIERA användare till STDOUT (DELIMITER '|');

För att kopiera tabell till fil

KOPIERA användare FRA '/ home / user / user_data' MED DELIMITER '|';

För att kopiera utgången från SQL-sats till fil

COPY (sql statement) TO '<filnamn med sökväg>';

KOPIERA (VÄLJ * FRÅN användaren VAR användarnamn Gillar 'A%') TILL '/ home / user / user_data';

För att kopiera till en komprimerad fil

KOPIERA användare till PROGRAM 'gzip> /home/user/user_data.gz';

Här körs program gzip för att komprimera användartabelldata.

Använda psql för att exportera data

Data kan exporteras med kopieringskommando eller med hjälp av kommandoradsalternativ för psql-kommandot.

Så här exporterar du csv-data från tabellanvändare till csv-fil:

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

Här gör kombinationen av -A och -F tricket.

-F är att ange avgränsare

-A or --no-align

Växlar till ojusterat utgångsläge. (Standardutgångsläget är annars anpassat.)



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow