Backup og Restore
PostgreSQL databaser backup- og restore procedurer er:
- pg_dump
- pg_restore
Advarsel: HUSK at bruge den rigtige version - ligger i bin-kataloget under installationen
Best practice er at lave separate dumps af hvert schema i en database (og restore dem derfra i korrekt rækkefølge). Årsagerne er:
public schemaet vil man normalt ikke tage backup af (Der bør ikke ligge userdata her!)
Hvis man har data der alligevel indlæses periodevis fra en ekstern kilde, vil det være et oplagt sted at spare.
hvis man tager en fuld DB-backup, vil man inkludere PostGIS basis-funktioner, og det kan give fejl i forbindelse med restore på en PostGIS enablet database, i hvert fald i ældre PostGIS-versioner
det er hurtigere at lave en selectiv restore (det er ikke altid man har "ødelagt" alle schemaer i en database). Man kan dog godt lave selektiv restore fra en backup
Best practice er at "pakke" backup/restore ind i cmd filer. Eksempel:
pg_dump.exe -f c:\temp\mindb_fot.backup -h pg1.septima.dk -U postgres -v -F t -n fot mindb
Parametre:
-f c:\temp\mindb_fot.backup : output filnavn
-h pg1.septima.dk : host
-U postgres : username
-v : verbose mode (detaljer)
-F t : format tar
-n fot : schemanavn
mindb : database
pg_restore.exe -h pg1.septima.dk -U postgres -d mindb -n fot -v c:\temp\mindb_fot.backup
Parametre:
-h pg1.septima.dk : host
-U postgres : username
-d mindb : database
-n fot : restore objekter i fot schema
-v : verbose mode (detaljer)
For mindre datamængder, kan ”plain” benyttes (så kan man inspicere backupfilen) - ellers benyt custom.
Brug kommandolinjen (pgAdmin kan hjælpe, men det er svært at styre – låser pgAdmin og manglende logning.
Et fuldt eksempel på backup script
Dette script kan sættes op i Scheduled tasks eller pg_cron eller PgAgent
@echo off
REM - backup directory can be a file server share that the PgAgent windows service account has access to
set BACKUPDIR="/path/to/backup/"
set PGHOST="localhost"
set PGUSER="postgres"
set PGBIN="C:/Program Files/PostgreSQL/8.2/bin/"
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
set dow=%%i
set month=%%j
set day=%%k
set year=%%l
)
for /f "tokens=1-3 delims=: " %%i in ("%time%") do (
set hh=%%i
set nn=%%j
)
REM - It would be nice to use gzip in the pg_dumpall call (or if pg_dumpall supported compression as does the pg_dump)
REM here as we do on the linux/unix script
REM - but gzip is not prepackaged with windows so requires a separate install/download.
REM Our favorite all purpose compression/uncompression util for Windows is 7Zip which does have a command-line
%PGBIN%pg_dumpall -h %PGHOST% -U %PGUSER% -f %BACKUPDIR%fullpgbackup-%year%%month%.sql
%PGBIN%pg_dump -i -h %PGHOST% -U %PGUSER% -F c -b -v -f "%BACKUPDIR%db1-%year%%month%%day%%hh%.compressed" db1
%PGBIN%pg_dump -i -h %PGHOST% -U %PGUSER% -F c -b -v -f "%BACKUPDIR%db2-%year%%month%%day%%hh%.compressed" db2