Projekt

Allgemein

Profil

Aktionen

110 Umzug einer Datenbank (pg dump backup) Schulungs Test System » Historie » Revision 46

« Zurück | Revision 46/96 (diff) | Weiter »
[X] Daniel S, 14.08.2019 11:00


Programme (pg_dump, pg_dumpall, createdb, psql) erreichbar unter ..\PostgreSQL\pg9.6\pg96\bin

Umzug einer Datenbank (pg_dump)

Backup

1. Dump erstellen

pg_dump -h localhost -p 5432 -U postgres -d DATABASE -O -f dump_DB.sql --disable-triggers
+ Hinweis: bei Anpassungen unten das Batch-File-Bsp anpassen!

  • -h -p -U sind Verbindungsoptionen: Host, Port, Benutzer für den dump
  • -d ist die best. Datenbank
  • -O keine Objekteigentümerschaft ausgeben
  • -f Dateiname
  • --disable-triggers Trigger bei Wiederherstellung deaktivieren.

2. search-path in Dump-Datei korrigieren, siehe #9521:

3. Rollen exportieren

pg_dumpall -h localhost -p 5432 -U postgres -r -f dump_roles.sql

X. Online Force

  • Hinweis: besser unten das Batch-Bsp für dump und Kopie, damit werden keine aktiven Nutzer gekickt
/* KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)*/
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'SOURCE_DB' AND pid <> pg_backend_pid();

/* CLONE DATABASE TO NEW ONE(TARGET_DB) */
CREATE DATABASE "SOURCE_DB_YYYYMMDD" WITH TEMPLATE "SOURCE_DB";
  • ACHTUNG: Dienst neu starten.

Wiederherstellung

1. Datenbank erzeugen

createdb -h localhost -p 5432 -U postgres NEUE-DB

2. implicit casts erzeugen

implicit-casts werden nicht mit importiert: ..\PSQL\0050 System\0 0 pg83-implicit-casts.sql muss davor oder danach auf der DB ausgeführt werden.

3. Rollen importieren

psql -h localhost -p 5432 -U postgres -f dump_roles.sql -q

4. Datenbank wiederherstellen

psql -h localhost -p 5432 -U postgres -d NEUE-DB -f dump_DB.sql -q -o db_reload_msglog.txt 2> db_reload_errorlog.txt

  • Verbindungsoptionen, s.o.
  • Vollständiges oben erstelltes Skript wird ausgeführt.
  • Datenbankname muss angegeben werden, sonst wird in System-DB "postgres" geschrieben
  • -q quiet (ist schneller)
  • -o Anfrageergebnisse in Datei (ist schneller)
  • 2> Fehler in Datei (ist schneller)

Batch - File - Bsp: Dump und Kopie

REM Aus Prodat-Pfad ausführen

REM dump ausführen gemäß Wiki
pg_dump -h localhost -p 5432 -U postgres -d "LOLL-LIVE" -O -f "W:\ftp\_USER\DS\dump_DB.sql" --disable-triggers

REM Evtl vorhandene Connection killen
REM psql -h localhost -p 5432 -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'PRODAT-DEMO-LOLL' AND pid <> pg_backend_pid();" template1 postgres

REM vorhandene DB löschen
psql -h localhost -p 5432 -c "DROP DATABASE IF EXISTS ""PRODAT-DEMO-LOLL""" template1 postgres

REM neue DB anlegen
psql -h localhost -p 5432 -c "CREATE DATABASE ""PRODAT-DEMO-LOLL""" template1 postgres

REM wir müssen im PRODAT-PFAD stehen
psql -f ".\PSQL\0050 System\0 0 pg83-implicit-casts.sql" "PRODAT-DEMO-LOLL" postgres

REM reload dump
psql -h localhost -p 5432 -U postgres -d "PRODAT-DEMO-LOLL" -f "W:\ftp\_USER\DS\dump_DB.sql" -q -o _db_reload_msglog.txt 2> _db_reload_errorlog.txt

Umzug des kompletten Clusters (pg_dumpall)

Backup

1. Dumps erstellen

Schema: pg_dumpall -h localhost -p 5432 -U postgres -O -s -f dumpall_schema.sql --disable-triggers
Daten : pg_dumpall -h localhost -p 5432 -U postgres -O -a -f dumpall_daten.sql --disable-triggers

  • Alle Rollen werden geschrieben
  • Alle Datenbanken werden mit CREATE und CONNECT ins Skript geschrieben.
  • Schema und Daten getrennt, damit implicit-casts eingespielt werden können.

2. search-path in Dump-Datei korrigieren, siehe #9521:

  • https://sourceforge.net/projects/fart-it/
  • fart.exe -c dumpall_schema.sql "SELECT pg_catalog.set_config('search_path', '', false);" "SELECT pg_catalog.set_config('search_path', 'public, TSystem, prodat_languages, z_99_deprecated', false);"
  • fart.exe -c dumpall_daten.sql "SELECT pg_catalog.set_config('search_path', '', false);" "SELECT pg_catalog.set_config('search_path', 'public, TSystem, prodat_languages, z_99_deprecated', false);"

Wiederherstellen

1. Strukturen anlegen:

psql -h localhost -p 5432 -U postgres -f dumpall_schema.sql -q -o msglog_schema.txt 2> errorlog_schema.txt

2. implicit-casts erzeugen:

implicit-casts werden nicht mit importiert: ..\PSQL\0050 System\0 0 pg83-implicit-casts.sql muss davor oder danach auf allen DBs ausgeführt werden.

3. Daten wiederherstellen:

psql -h localhost -p 5432 -U postgres -f dumpall_daten.sql -q -o msglog_daten.txt 2> errorlog_daten.txt

  • Alle Rollen werden erzeugt
  • Alle Datenbanken werden erzeugt

Von [X] Daniel S vor fast 6 Jahren aktualisiert · 46 Revisionen