Amtliche Schulverwaltung
Sie befinden sich hier: start » alle » technik » postgresql » upgrade-major-release

postgreSQL Upgrade Major-Release - Beispiel 9.2 auf 9.6

Für ein upgrade auf ein neues Major-Release wird das DB-Tool pg_upgrade verwendet. Es passt die bestehenden Datenbanken an die neue Version an.

Ausgangssituation

Das Datenbanksystem und Datenbank (Verzeichnis „Data“) sind auf der Partition D installiert im Verzeichnis postgres. Darunter befindet sich hier im Bild bereits die neue Version 9.6.

Vorgehen

Neue Version herunterladen

Installation neue Version

  • Installer als Admin aufrufen
  • in D !!! installieren, d.h. D:\PostgreSQL9.6\
  • ⇒ Achtung: falls alter Server noch läuft, schlägt der Installer den falschen Port vor!
  • ⇒ alten Server stoppen und auf 5432 beharren
  • nicht den Stackbuilder anklicken

Schreibrechte Verzeichnisse "Data" anpassen

  • Dem Verzeichnis data in beiden Installationen für „Benutzer“ Vollzugriff gewähren (deshalb ist es gut, wenn dieses nicht auf C:/programme liegt.)
  • Das muss nach Konvertierung natürlich wieder rückgängig gemacht werden.

DB für neue postgreSQL-Version anpassen

  • beide Server stoppen
  • beide hba.conf anpassen mit den beiden Zeilen „host all postgres…“
  • # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # IPv4 local connections:
    host    all             postgres             127.0.0.1/32            trust
    host    all             postgres             ::1/128                 trust

* die neue hba.conf anpassen, damit der Applikationssserver zugreifen kann, falls er auf einem anderen System installiert ist:

  • # TYPE  DATABASE        USER            ADDRESS                 METHOD
    host	all		all		192.168.xxx.0/24	md5

In der offiziellen Upgrade-Doku steht, dass man cmd.exe als user postgres starten soll. *

RUNAS /USER:postgres "CMD.EXE" 
SET PATH=%PATH%;%NEWVERSION%bin; 

Das funktioniert bei der 9.2er aber nicht, weil es den user unter Windows gar nicht gibt, sondern nur in der DB. Deshalb kann man den user postgres erst mit den DB-Tools benutzen, wie z.B. pg_upgrade, also den username postgres erst bei dem Aufruf übergeben. Hier also stattdessen wie folgt weitermachen:

  • CMD als Administrator starten
  • Verzeichnis in schreibbarer Umgebung anlegen (hier: D:\temp) (siehe auch Bildschirmfoto ganz oben)
  • im CMD-Fenster dorthin wechseln

  • pg_upgrade aufrufen mit den folgenden Parametern (Zeilenumbrüche durch Leerzeichen ersetzen):
  •  "D:\PostgreSQL9.6\bin\pg_upgrade.exe" -U postgres 
    --old-datadir "D:/postgresql/data" 
    --new-datadir "D:/postgreSQL9.6/data" 
    --old-bindir "D:/postgresql/bin" 
    --new-bindir "D:/postgreSQL9.6/bin"
  • hier das log (Beispiel, wenn es klappt):
  •  
      * Performing Consistency Checks
    -----------------------------
    Checking cluster versions                                   ok
    Checking database user is the install user                  ok
    Checking database connection settings                       ok
    Checking for prepared transactions                          ok
    Checking for reg* system OID user data types                ok
    Checking for contrib/isn with bigint-passing mismatch       ok
    Checking for roles starting with 'pg_'                      ok
    Checking for invalid "line" user columns                    ok
    Creating dump of global objects                             ok
    Creating dump of database schemas
                                                                ok
    Checking for presence of required libraries                 ok
    Checking database user is the install user                  ok
    Checking for prepared transactions                          ok
    
    If pg_upgrade fails after this point, you must re-initdb the
    new cluster before continuing.
    
    Performing Upgrade
    ------------------
    Analyzing all rows in the new cluster                       ok
    Freezing all rows on the new cluster                        ok
    Deleting files from new pg_clog                             ok
    Copying old pg_clog to new server                           ok
    Setting next transaction ID and epoch for new cluster       ok
    Deleting files from new pg_multixact/offsets                ok
    Setting oldest multixact ID on new cluster                  ok
    Resetting WAL archives                                      ok
    Setting frozenxid and minmxid counters in new cluster       ok
    Restoring global objects in the new cluster                 ok
    Restoring database schemas in the new cluster
                                                                ok
    Setting minmxid counter in new cluster                      ok
    Copying user relation files
                                                                ok
    Setting next OID for new cluster                            ok
    Sync data directory to disk                                 ok
    Creating script to analyze new cluster                      ok
    Creating script to delete old cluster                       ok
    
    Upgrade Complete
    ----------------
    Optimizer statistics are not transferred by pg_upgrade so,
    once you start the new server, consider running:
        analyze_new_cluster.bat
    
    Running this script will delete the old cluster's data files:
        delete_old_cluster.bat
    
    D:\temp>

Abschließende Arbeiten

  • Im Log oben wird aufgefordert, abschließend analyze_new_cluster.bat aufzurfuen.
  • Dazu muss der neue postgreSQL-Server laufen.
  • Es liegt im angelegten temp-Verzeichnis:
  • Aufruf: (dann vielleicht Passwort eingeben)
  • D:\temp>analyze_new_cluster.bat
    This script will generate minimal optimizer statistics rapidly
    so your system is usable, and then gather statistics twice more
    with increasing accuracy.  When it is done, your system will
    have the default level of optimizer statistics.
    
    If you have used ALTER TABLE to modify the statistics target for
    any tables, you might want to remove them and restore them after
    running this script because they will delay fast statistics generation.
    
    If you would like default statistics as quickly as possible, cancel
    this script and run:
        "D:/postgreSQL9.6/bin/vacuumdb" -U "postgres" --all --analyze-only
    
    Passwort:
    vacuumdb: bearbeite Datenbank »asv«: Generating minimal optimizer statistics (1
    target)
    vacuumdb: bearbeite Datenbank »cache«: Generating minimal optimizer statistics (
    1 target)
    vacuumdb: bearbeite Datenbank »postgres«: Generating minimal optimizer statistic
    s (1 target)
    vacuumdb: bearbeite Datenbank »template1«: Generating minimal optimizer statisti
    cs (1 target)
    vacuumdb: bearbeite Datenbank »asv«: Generating medium optimizer statistics (10
    targets)
    vacuumdb: bearbeite Datenbank »cache«: Generating medium optimizer statistics (1
    0 targets)
    vacuumdb: bearbeite Datenbank »postgres«: Generating medium optimizer statistics
     (10 targets)
    vacuumdb: bearbeite Datenbank »template1«: Generating medium optimizer statistic
    s (10 targets)
    vacuumdb: bearbeite Datenbank »asv«: Generating default (full) optimizer statist
    ics
    vacuumdb: bearbeite Datenbank »cache«: Generating default (full) optimizer stati
    stics
    vacuumdb: bearbeite Datenbank »postgres«: Generating default (full) optimizer st
    atistics
    vacuumdb: bearbeite Datenbank »template1«: Generating default (full) optimizer s
    tatistics
    
    Done
    
    D:\temp>
  • Berechtigungseweiterungen für Verzeichnis „Data“ in beiden Installationen (postgreSQL und postgreSQL9.6) wieder rückgängig machen:
    • „Benutzer“ hat auf Data nicht mehr vollzugriff
    • „Benutzer“ darf nicht mehr ändern
    • „Benutzer“ hat keinen schreibzugriff mehr

  • aus beiden Dateien hba.conf die beiden Zeilen „host all postgres…„ wieder entfernen

ASV-DB überprüfen

  • mit dbctl.cmd die konvertierte ASV-DB checken:
  • Wechsel auf den Applikationsserver
  • CMD öffnen
  • dbclt aufrufen:
  • C:\ASV\Server\bin>dbctl.cmd -d C:\Konfigs-LMGU\dbsettings.ini -u sys -p xxx
    verify
    1591 [main] INFO dbctl - authentication successful for user 'sys'
    2871 [main] INFO dbctl - Überprüfung - 09.11.2018 09:40
    2871 [main] INFO dbctl - Überprüfung der DSS-Datenbank wird gestartet.
    2871 [main] INFO dbctl - =======================================================
    ==============================
    16067 [main] INFO dbctl - DSS-Datenbank entspricht der Referenzdatenbank.
    16067 [main] INFO dbctl - ======================================================
    ===============================
    16098 [main] INFO dbctl - Überprüfung wurde beendet.
    16098 [main] INFO dbctl - Dauer: 13 Sekunde(n)
    
    C:\ASV\Server\bin>

Grundlagen der Doku