Projekt

Allgemein

Profil

Aktionen

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

PUNKT 3 IST STANDARD FÜR UPDATE POSTGRESQL

1. 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!
  • Minimal für Spezialfälle (Keywords fehlen, Suche geht nicht usw): pg_dump -h localhost -p 5432 -U postgres -d DATABASE -O -f dump_DB.sql --disable-triggers --exclude-table-data=tlog.auditlog --exclude-table-data=public.lagerlog --exclude-table-data=public.stvtrs --exclude-table-data=public.opreg --exclude-table-data='tcache.tformass*'
  • Erläuterungen
  • 2. search-path in Dump-Datei korrigieren, siehe #9521:
  • 3. ggf. Rollen exportieren (wenn Wiederherstellung auf anderem DB-Cluster erfolgt)
  • pg_dumpall -h localhost -p 5432 -U postgres -r -f dump_roles.sql

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. ggf. Rollen importieren (wenn Wiederherstellung auf anderem DB-Cluster erfolgt)
  • 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
  • Erläuterungen

2. Kopie innerhalb des Clusters

  • Beachte Script zum Erstellen einer TestDatenbank unter Prodat\Administration! Das Vorgehen hier ist nur noch in ausnahmefällen durchzuführen, da es auch erfordert alle Nutzer rauszuwerfen!
  • 1. Verbindungen abwürgen
  • SQL
  • 2. direkte Kopie erstellen
  • CREATE DATABASE "SOURCE_DB_YYYYMMDD" WITH TEMPLATE "SOURCE_DB";
  • 3. Prodat-Dienst neu starten.

3. Umzug des kompletten Clusters (pg_dumpall)

Für den Umzug eines kompletten Clusters kann die Datei Administration\DB_Admin_BackUp_TestDB\ *DB_Move_DB_Cluster__too.bat verwendet werden. Diese fasst alle Einzelschritte zusammen. Nur die Connectdaten in dem Batch ändern (IP-Adresse, ggf. Port). Es ist dabei zu beachten:

  • Die pg_hba.conf sowohl im Source-als auch im Target-System müssen entsprechend aufgesetzt sein, insbesondere muss der User postgres auf trust gesetzt sein - sowohl für Verbindungen innerhalb des neuen Systems, als auch für Verbindungen aus dem neuen ins alte System.
    • Der Befehl psql -h host postgres postgres muss ohne Passwort funktionieren für host=localhost sowie host=ip_des_alten_servers.
  • Auf dem Altsystem ist zu prüfen, dass nicht zu viele Backups/Sicherungen existieren - da jede einzelne Sicherung auf das neue System mitübertragen wird (alle Datenbanken des Clusters) und im neuen System nochmal angefasst werden muss.
  • Implicit Casts müssen nach der Migration noch per Hand eingespielt werden.

Neben allen Datenbanken legt das Skript auch alle User und Rollen korrekt an, und kümmert sich um alle weiteren Nebenschritte, außer die oben erwähnten.

Backup

  • Alle Rollen werden geschrieben
  • Alle Datenbanken werden mit CREATE und CONNECT ins Skript geschrieben.

Hinweis: auch noch mit PG13 notwendig

  • einzelschritte zu gehen da sonst immer (alle Kombinationen probiert) die implicit casts knallen. Auch ein ändern der template 1 nutzt nichts, da folgendes dennoch immer fehlt und somit doppelte casts vorliegen.
    DELETE FROM pg_operator WHERE oprcode = 'anytextcat'::regproc;
    DELETE FROM pg_operator WHERE oprcode = 'textanycat'::regproc;
    

Dumps erstellen mittels Schema und Daten getrennt für Einspielen von implicit casts

  • Schema: pg_dumpall -h localhost -p 5432 -U postgres -O -s -f E:\ProdatERP\BackUp\PostgreSQL\pgdump\dumpall_schema.sql --disable-triggers --clean
  • Daten : pg_dumpall -h localhost -p 5432 -U postgres -O -a -f E:\ProdatERP\BackUp\PostgreSQL\pgdump\dumpall_daten.sql --disable-triggers
  • Schema und Daten getrennt, damit implicit-casts eingespielt werden können.

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

  • Alle Rollen werden erzeugt
  • Alle Datenbanken werden erzeugt

Wiederherstellen in Einzelschritten

  • 1. Strukturen anlegen:
  • psql -h localhost -p 5432 -U postgres -f E:\ProdatERP\BackUp\PostgreSQL\pgdump\dumpall_schema.sql -q -o E:\ProdatERP\BackUp\PostgreSQL\pgdump\msglog_schema.txt 2> E:\ProdatERP\BackUp\PostgreSQL\pgdump\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 E:\ProdatERP\BackUp\PostgreSQL\PostgreSQL\pgdump\dumpall_daten.sql -q -o E:\ProdatERP\BackUp\PostgreSQL\pgdump\msglog_daten.txt 2> E:\ProdatERP\BackUp\pgdump\errorlog_daten.txt

4. Batch-File-Bsp: Dump und Kopie wieder einspielen. TestSystem im laufenden Betrieb.

Von [X] Christoph Wellm vor 10 Tagen aktualisiert · 99 Revisionen