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

results matching ""

    No results matching ""