Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Gedankenexperiment: Man müsste postgres 9 so installieren, dass charly darauf nicht zugreifen kann (sonst Split-Brain; damit charly auf postgres 9 oder gar 13 zugreifen kann, braucht man das Skript bzw. die Befehle aus dem Skript (ab Step 7) und beim Skript da geht man sogar tief bis in die Wurzeln von regedit, falsch, es geht nur um DIESE postgres-Instanz, die gerade läuft (Windows Dienste), es ist unklar, wenn 2 postgres-Versionen parallel laufen) und dann nutzt man das Skript, um postgres 9 auf 13 upzugraden (vorausgesetzt die Pfade sind alle korrekt). Richtiger ist, dass charly, wie viele andere Programme auf den aktiven postgres-Dienst in Windows zugreifen können, ob Version 8, 9, 13, 16, ... Die Gefahr besteht, wenn der Postgres8 von Postgres9 als Dienst überschrieben wird. Auf Postgres9 kann charly nicht so ohne weiteres zugreifen, doch schon, wenn nur 1 postgres9-Instanz und sonst keine andere postresX-Instanz läuft als Dienst im Hintergrund.
- Es ist wichtig, dass der --servicename nicht überschrieben wird!
- Die Gefahr besteht darin, dass der Dienst von postgres8 überschrieben wird oder der Dienst von postgres8 gelöscht wird. Das wird aber nicht passieren, da bei bspw. postgres9.5 der Dienst- und Anzeigename postgresql-x64-9.5 lautet.
- charly zwischendurch (besser: am Ende) testen:
- Postgres-Service (Dienst) starten, den ältesten postgres-Dienst
- acd.bat startall
- Erst Postgres13 starten, DANN dump einspielen, vom Postgres13 Pfad aus. (??? soll das Skript machen.)
- Praxis - Es geht los:
- charly-Dienste beenden (acd.bat stopall)
- dumpall erstellen von postgres 8 (pg_dumpall -U postgres -f E:\Solutio\dump8-DATUM.sql), geht schnell. Man kann auch dump8-DATUM-UHRZEIT-aktuell.sql als Dateinamen verwenden, aber ein Datum reicht, weil das Einspielen des dumps unfassbar lange dauert. zur Not dump-postgresVersion-DATUM-NUMMER.sql
- postgres8-Dienst beenden (pg_ctl stop -D E:\Solutio\Server\data -m fast) oder über "Dienste", der Dienst lautet "Solutio Database Server-postgres 8"
- postgres 9 installieren (username=postgres ; password=123), Starttyp automatisch => manuell unter "Dienste". Ich habe postgres9.5 über den Installationsassistenten installiert. Es könnte (WIRD) ein Problem geben, dass das Passwort nicht #post.2000! lautet sondern 123.
- wird gespeichert unter E:\Solutio\Server\PostgreSQL9.5
- die postgresql-9.6.24-1-windows-x64.exe lässt sich nicht öffnen aber die postgresql-9.5.25-1-windows-x64.exe
- postgresql-9.6.24-1-windows-x64.exe lässt sich installieren mit cmd => postgresql-9.6.24-1-windows-x64.exe --install_runtimes 0
- die C++-Bibliotheken von -9.6.24-1-windows-x64.exe sind älter als bei den meisten Windows-Installationen, deswegen -9.6.24-1-windows-x64.exe --install_runtimes 0
- dumpall auf postgres 9 ziehen (vom postgres9.5-Pfad aus : psql -U postgres -d postgres -f E:\Solutio\dump-DATUM.sql)
- auf Nachfrage das Passwort #post.2000! eingeben, Enter drücken.
- ... lauter lowrite, lo_close, lo_open ... ob das wirklich läuft? also die Festplatte arbeitet. dauert unfassbar lange. ALTER TABLE, CREATE INDEX, ...
- postgres9.5 - 19:42 - 443 MB (464.702.159 Bytes)
- postgres9.5 - 19:46 - 446 MB (467.782.351 Bytes)
- es geht voran. Nach 2 Stunden wurde die 2 GB dump-Datei eingespielt!
- mit ALTER USER postgres WITH PASSWORT '#post.2000!' könnte man das Passwort von 123 auf #post.2000! ändern.
- merkwürdig: über pgAdmin3 unter \PostgreSQL9.5\bin kann ich mich nur über #post.2000! einloggen.
- evtl. Postgres13.11 deinstallieren, weil ich Postgres13.12 installiere werde (Fehler von mir, dass ich postgres13.11 nicht deinstalliert und den Ordner nicht unbenannt habe bspw. zu /PostgreSQL13solutio-ist-der-rotz, weil /PostgreSQL13/data nur Müll aus dem migrate_all.bat-Skript beinhaltet)
- postgres9 als Dienst soll aktiv bleiben
- Skript starten (dumpall von postgres9 und auf postgres 13 ziehen), auf Pfade und korrekte Dateinamen achten
- fe_sendauth: no password supplied
- ich versuche es wieder ohne Skript...
- postgres9.5 deinstallieren (/Postgres9.5 falls vorhanden umbenennen) und diesmal mit passwort #post.2000! installieren
- ich hatte vergessen, pg9_data_path auf PostgreSQL9.5 zu ändern :-(
- ich musste 21 Mal das Passwort #post.2000! eingeben
- evtl. Postgres13.11 deinstallieren, weil ich Postgres13.12 installieren will und werde, aber aus Wut ggü. allen Beteiligten* habe ich das nicht gemacht also die Deinstallation von Postgres13.11, in Postgres13.11 waren auch teilweise Datenbanken aus der Zeit, wo ich ahnungslos irgendwas mit dem Skript versucht hatte, ein paar Megabyte waren da schon drin. Ist auch ein guter Test um zu sehen, ob ein Upgrade von 13.X zu 13.Y ohne Probleme abläuft. (22.10.2023: Ich hätte postgres13 löschen und /data bzw. den Ordner /PostgreSQL13 umbenennen sollen, aber ich war zu müde und zu erschöpft, ich hatte viel zutun, ich kannte postgres fast genauso wenig wie solutio)
- postgres9 als Dienst soll aktiv bleiben
- Skript starten (dumpall von postgres9.5 und auf postgres13 ziehen), auf Pfade und korrekte Dateinamen achten
- postgres9.5 sollte dann als Service beendet werden (hatte ich vergessen? macht das Skript es von alleine? ja...)
- Einmal Passwort für postgres13 eingeben: #post.2000!
- Reichlich Fehler, dies und das existiert bereits. (/data erster Versuch generiert von migrate_all.bat hat fehlerhafte Datenbanken, die nicht durch korrekte Datenbanken überschrieben werden)
- postgres13 - 23:34 - 577 MB (606.013.449 Bytes)
- postgres13 - 23:59 - 1,50 GB (1.615.282.279 Bytes)
- nächster Tag (in der Mitte des Einspielens ist zeitweise überhaupt nicht passiert, aber es ging weiter)
- postgres - 00:56 - 1,53 GB (1.653.130.312 Bytes)
- Fehler über Fehler ...
- charly-Module werden gestartet
- und nach 3 Stunden sind wir fertig.
- Datensicherung funktioniert gut, charly läuft.
- Konnektor-Operationen sind alle da einschl. eHBA in den Konnektoroperationen, nicht aber in den Signaturaufträgen.
- Jetzt funktioniert auch ePA! Sonst ist das Fenster mitsamt charly immer eingefroren. Bald folgt der Praxistext. (Ok ab dem zweiten Versuch friert es wieder ein. Vielleicht liegt es an kim4charly, später wurde ein Konto hinzugefügt....)
- Aber: kim4charly ist völlig leer!
- Einmal das KIM-Konto in kim4charly eingefügt und nach einem Klick auf Synchronisieren kamen alle Mails auf einmal nach ein paar Minuten (dummerweise datiert auf heute).
- unter der Windows Firewall des Windows Servers muss E:\Solutio\Server\PostgreSQL13\bin\postgres.exe für Private Netzwerke bzw. Privates Profil freigeschaltet werden (LAN-Server macht im privaten Profil mehr Sinn als im öffentlichen Profil)
- die EBZ-Nachrichten sind alle komplett leer (keine Antragsnummern) und die Übersicht über alle eHKP sieht sehr mager aus.
- es lassen sich keine KIMs verschicken. wahrscheinlich ist das alte KIM-Konto (neu erstellt, weil kim4charly komplett leer) in der postgres13-Datenbank zerfickt. nicht gut für eAU und eHKP.
- Ein Teil der KIMs, von dem Teil, die heruntergeladen werden konnten, sind nicht entschlüsselbar, da alte SMC-B fehlt/abgelaufen ist.
- eHBA ist rausgeflogen. Musste wieder eingepflegt werden (13.10.2023)
- eAUs sind alle weg mit dem Vermerk "fehlerhaft: HTTP Error 404: Die angeforderte Seite oder Ressource kann nicht gefunden werden. Bitte aktualisieren Sie gegebenenfalls die Ressource (Liste, Status, etc.) und versuchen Sie es zu einem späteren Zeitpunkt erneut." (14.10.2023).
- Die Daten vom e-Modul, die Beschriftungen und die Verweise, wo der INHALT der e-Module ist (eAU, eHKP, KIM-Nachrichten) ist vorhanden. Der Inhalt ist weg, entfernt, ratzekahl geleert. (15.10.2023) Ich frage mich wer Schuld hat: Postgres, ein mächtiges DBMS, welches anscheinend nicht mit großen, voluminösen Daten bzw. großen Dateninhalt pro Zelle arbeiten kann, oder die schlechte Einbindung durch solutio, die falschen SQL-Befehle oder die falsche Anwendung von der Sprache SQL.
- Es ist in der Tat so, dass meine Methode wesentlich besser funktioniert. Hier am Beispiel zu postgres16:
- dump erstellen => cmd im bin-Verzeichnis der älteren postgres-Version => pg_dumpall -U postgres -f E:\Solutio\dumpVERSIONSNUMMER-DATUM.sql
- 21 Mal das Passwort #post.2000! eingeben (nur beim postgres9.5)
- alten postgres-Dienst beenden (kann auch der neue Installer), neues postgres im separaten Ordner installieren => cmd => call postgresql-16.0-1-windows-x64.exe --superaccount postgres16 --superpassword #post.2000! --prefix E:\Solutio\Server\PostgreSQL16 --datadir E:\Solutio\Server\PostgreSQL16\data --servicename Solutio-PostgreSQL16
- dump einspielen => cmd im bin-Verzeichnis der neuen postgres-Version => psql -U postgres16 -d postgres -f E:\Solutio\dumpVERSIONSNUMMER-DATUM.sql
- Ein Mal das Passwort #post.2000! eingeben.
- habe nacheinander postgres9.5 und postgres16 genutzt und charly gestartet. Es ist alles da. Alles. und nun? (19.10.2023)
- Eine Sache ist neu beim Start der charly-internen Sicherung: Fehler in ppg-Service beim Sichern der Datenbanken. Tritt bei Postgres16 auf.
- Und nicht vergessen die Microservices regemäßig neustarten!
- Ich hätte die erste, fehlerhafte Version von postgres13 inkl. /data-Ordner komplett löschen oder wenigstens wie jetzt am 22.10.2023 umbenennen sollen. Der zweite Versuch, diesmal mit größeren C:\-Laufwerk und auf eine SSD geklont (TRIM soll nicht auf RAID gehen können) ist zu 99 % perfekt. dumpall von 8.4.6 zu 9.5.25, 9.5.25 wird installiert über die .exe-Datei im Installationsassistenten, den Ordner /PostgreSQL9.5 als Pfad nehmen. Dann postgres13.12 runterladen und über dem Skript in einem neuen, leeren /PostgreSQL13-Ordner den dumpall von postgres9 einspielen. Ziel ist, dass alles mitübertragen wird, nur die Nummer der Datenbank ist jetzt höher.
- -----------------------------------------------------------------------------------------------
- alter Versuch vor dem Gedankenexperiment:
- charly-dienste beenden
- dumpall erstellen (pg_dumpall -U postgres -f E:\Solutio\dump-DATUM.sql)
- postgres 8 beenden (pg_ctl.exe stop -D PostgreSQL/data" -m fast)
- neues postgres 8+X (X != 0) installieren (username = postgres13 ... pw = #post.2000! ... )
- (postgres 8+X soll gestoppt werden, um config-Datei pg_hba.conf (E:\Solutio\Server\PostgreSQL\data\pg_hba.conf) zu kopieren, die paar Zeilen am Ende
- host all all ::1/128 trust
- host all all 127.0.0.1/32 trust
- host all all 0.0.0.0/0 md5)
- postgres 8+X als Dienst starten
- dump einspielen (psql -U postgres -d postgres -f E:\Solutio\dump-DATUM.sql -c "SELECT '#post.2000!'
- Das mit dem SELECT #post.2000! würde ich weglassen und wenn psql von postgres9.5 nach einem Passwort fragt, dann #post.2000! eingeben. Wer hätte das gedacht, dass solutio für postgres8 aus ein Passwort ausgewählt hat: #post.2000!
- Auf pgtune.leopard.in.ua lassen sich Modi einstellen in \Solutio\Server\PostgreSQLxy\data\postgresql.conf
- Es gibt zwei Zahlen, die ich jetzt sehr hasse: 96 und vorallem 84 bzw. 846.
- Laut Theorie müsste das Skript ab jetzt völlig autonom erst ein dumpall aus postgres8+X also bspw. postgres9.6 machen und den dump auf postgres13 einspielen etc.
- -------------------------------------------------------------------------------------------
- -------------------------------------------------------------------------------------------
- -------------------------------------------------------------------------------------------
- migrate_all.bat - modifiziert fürs zmk grünenplan 2023-09
- @echo off
- setlocal
- REM Passen Sie diese Daten an Ihr System an.
- set solutio_path=E:\Solutio
- set pg9_path=%solutio_path%\Server\PostgreSQL9.5
- set pg9_bin_path=%pg9_path%\bin
- set db_dump_dir=%solutio_path%
- set pg13_path=%solutio_path%\Server\PostgreSQL13
- set pg13_superuser_password=#post.2000!
- set pg_port=5432
- REM Alles Weitere muss normalerweise nicht, kann aber angepasst werden. Den Download-Link modifizieren mache ich wegen solutio nur noch bei der migrate_all_16.bat
- set db_dump_path=%db_dump_dir%\dump-DATUM.sql
- set "pg9_data_path=%solutio_path%\Server\PostgreSQL9.5\data"
- REM set download_url=https://get.enterprisedb.com/postgresql/postgresql-13.12-1-windows-x64.exe
- set installer_path=%solutio_path%\postgresql-13.12-1-windows-x64.exe
- REM Nicht veraendern!
- set pg_service_name=Solutio_PostgreSQL13
- set old_pg_version=9
- set acd_path=%solutio_path%\Server\ncjs
- set start_step=%~2
- if "%~1"=="-s" (
- if "%~2"=="" (
- echo Es wurde kein Schritt angegeben.
- exit /b 1
- )
- )
- if "%start_step%"=="2" goto step2
- if "%start_step%"=="3" goto step3
- if "%start_step%"=="4" goto step4
- if "%start_step%"=="5" goto step5
- if "%start_step%"=="6" goto step6
- if "%start_step%"=="7" goto step7
- echo Dieses Skript sollte nur verwendet werden, wenn in Ihrer Datenbank AUSSCHLIESSLICH Solutio Datenbanken existieren und nie etwas an der Installation geaendert wurde.
- echo Falls dies nicht der Fall ist, oder Sie sich nicht sicher sind, verwenden Sie bitte migrate_solutio.bat
- echo ""
- echo Folgende Werte werden verwendet. Bitte pruefen Sie, ob diese zu Ihrem System passen:
- echo solutio_path=%solutio_path%
- echo pg9_path=%pg9_path%
- echo db_dump_dir=%db_dump_dir%
- echo pg13_path=%pg13_path%
- echo pg_port=%pg_port%
- echo Haben Sie alle Werte ueberprueft? Soll die Migration zu Postgres 13 durchgefuehrt werden?
- choice /c JN
- if errorlevel 2 (
- echo Die Migration wird nicht gestartet. Bitte passen Sie die Werte direkt Im oberen Teil des Skriptes an.
- exit /b 1
- )
- set "size=0"
- for /R "%pg9_path%\data\base" %%F in (*) do (
- set /A "size+=%%~zF"
- )
- set /A "folder_size_mb=(size / 1024 / 1024) + 200"
- echo Benoetigter Speicherplatz in %db_dump_dir%: %folder_size_mb% MB
- echo Benoetigter Speicherplatz in %pg13_path%: %folder_size_mb% MB
- echo Haben Sie ueberprueft, ob in den Pfaden jeweils ausreichend Specicherplatz vorhanden ist?
- choice /c JN
- if errorlevel 2 (
- echo Die Migration wird nicht gestartet.
- exit /b 1
- )
- call :get_pg_version %pg9_bin_path%
- if %old_pg_version% gtr 12 (
- echo Sie versuchen, von PosgreSQL Version %old_pg_version% zu migrieren. Dies ist nicht moeglich. Haben Sie die Migration schon einmal ausgefuehrt?
- exit /b 1
- )
- echo Alle Services stoppen
- call %acd_path%\acd.bat stopall
- :step1
- echo.### Step 1: Erzeugen der Datenbank Sicherung aus PostgreSQL 9 (dies wird eine Weile dauern...)
- call "%pg9_path%\bin\pg_dumpall.exe" -U postgres -p %pg_port% -f "%db_dump_path%"
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Erstellen der Datenbank Sicherung mit PostgreSQL 9.
- exit /b 1
- )
- :step2
- echo.### Step 2: Alten PostgreSQL Service stoppen
- call "%pg9_path%\bin\pg_ctl.exe" stop -D "%pg9_path%\data" -m fast
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Stoppen des PostgreSQL 9 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
- exit /b 1
- )
- sc config Solutio_PostgreSQL start=demand
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Deaktivieren des PostgreSQL 9 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
- exit /b 1
- )
- :step3
- echo.### Step 3: PostgreSQL 13 herunterladen
- @echo on
- call powershell Start-BitsTransfer -Source %download_url% %installer_path%
- @echo off
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Herunterladen des PostgreSQL 13 Installers. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 3 aus
- exit /b 1
- )
- :step4
- echo.### Step 4: PostgreSQL 13 installieren
- @echo on
- call "%installer_path%" --superaccount postgres13 --superpassword %pg13_superuser_password% --prefix "%pg13_path%" --datadir "%pg13_path%\data" --servicename %pg_service_name% --enable_acledit 1 --disable-components pgAdmin,stackbuilder --mode unattended --unattendedmodeui minimalWithDialogs
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Installieren von PostgreSQL 13. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 4 aus
- exit /b 1
- )
- @echo off
- call "%pg13_path%\bin\pg_ctl.exe" stop -D "%pg13_path%\data" -m f
- call copy /y "%pg9_path%\data\pg_hba.conf" "%pg13_path%\data\pg_hba.conf"
- :step5
- echo.### Step 5: PostgreSQL 13 starten
- call net start %pg_service_name%
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Starten von PostgreSQL 13. Bitte pruefen Sie die Datei pg_hba.conf. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 5 aus
- call notepad.exe "%pg13_path%\data\pg_hba.conf"
- exit /b 1
- )
- :step6
- echo.### Step 6: Einspielen der Datenbank Sicherung in PostgreSQL 13 (dies wird eine Weile dauern...)
- call "%pg13_path%\bin\psql.exe" -U postgres13 -d postgres -p %pg_port% -f "%db_dump_path%" -c "SELECT '%pg13_superuser_password%';" >NUL
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Einspielen der Daten in die PostgreSQL 13 Datenbanken. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 6 aus
- exit /b 1
- )
- :step7
- echo.### Step 7: Konfiguration der Solutio services
- @echo off
- set KEY_NAME=HKLM\Software\Solutio\Charly\PostgreSQL
- set KEY_NAME_WOW=HKLM\Software\Wow6432Node\Solutio\Charly\PostgreSQL
- set VALUE_NAME=Path
- set VALUE_VERSION=Version
- set NEW_NAME=%pg13_path%
- set NEW_VERSION=13.11.1
- call reg.exe add "%KEY_NAME%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
- call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
- call reg.exe add "%KEY_NAME%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
- call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
- rem call net stop ppg
- rem if %ERRORLEVEL% NEQ 0 (
- rem echo Fehler beim Stoppen des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
- rem exit /b 1
- rem )
- REM rename old H2 database from ppg service, then it will be recreated with the new postgres db values
- rename "%solutio_path%\Server\ncjs\database\ppg-service\persistence.mv.db" "persistence_alt.mv.db"
- set "persistence_trace_path=%solutio_path%\Server\ncjs\database\ppg-service\persistence.trace.db"
- if exist "%persistence_trace_path%" (
- rename "%persistence_trace_path%" "persistence_alt.trace.db"
- )
- set "file_path=%solutio_path%\Server\ncjs\conf\ppg\application.yml"
- set "old_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg9_path%"
- set "new_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg13_path%"
- call :replace "%file_path%" "%old_line%" "%new_line%"
- set "file_path2=%solutio_path%\Server\ncjs\conf2\ppg\application.yml"
- if exist "%file_path2%" (
- call :replace "%file_path2%" "%old_line%" "%new_line%"
- )
- rem call net start ppg
- rem if %ERRORLEVEL% NEQ 0 (
- rem echo Fehler beim Starten des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
- rem exit /b 1
- rem )
- echo Alle Services starten
- call %acd_path%\acd.bat startall
- echo "Database migration completed successfully."
- pause
- exit /b
- :replace
- set "filepath=%~1"
- set "oldline=%~2"
- set "newline=%~3"
- set "temp_file=%TEMP%\temp_file.tmp"
- (for /F "usebackq delims=" %%a in ("%filepath%") do (
- if "%%a"=="%oldline%" (
- echo %newline%
- ) else (
- echo %%a
- )
- )) >"%temp_file%"
- move /y "%temp_file%" "%filepath%"
- exit /b
- :get_pg_version
- set "pg_bin_path=%~1"
- for /f "usebackq tokens=2 delims=. " %%G in (`"%pg_bin_path%\pg_config.exe" --version`) do (
- set "old_pg_version=%%G"
- exit /b
- )
- exit /b
- -------------------------------------------------------------------------------------------
- -------------------------------------------------------------------------------------------
- -------------------------------------------------------------------------------------------
- migrate_all_16.bat (auf eigene Gefahr, bei solutio unbeliebt)
- @echo off
- setlocal
- REM Passen Sie diese Daten an Ihr System an.
- set solutio_path=C:\Solutio
- set pg13_path=%solutio_path%\Server\PostgreSQL13
- set pg13_bin_path=%pg13_path%\bin
- set db_dump_dir=%solutio_path%
- set pg16_path=%solutio_path%\Server\PostgreSQL16
- set pg16_superuser_password=#post.2000!
- set pg_port=5432
- REM Alles Weitere muss normalerweise nicht, kann aber angepasst werden. Für den Download-Link muss man flink sein und unter
- REM https://www.enterprisedb.com/downloads/postgres-postgresql-downloads das neuste Paket runterladen. Während es lädt, den Link extrahieren im Browser.
- REM und in set download_url= einfügen.
- set db_dump_path=%db_dump_dir%\dump13.sql
- set "pg13_data_path=%solutio_path%\Server\PostgreSQL13\data"
- set download_url=https://get.enterprisedb.com/postgresql/postgresql-16.0-1-windows-x64.exe
- set installer_path=%solutio_path%\postgresql-16.0-1-windows-x64.exe
- REM Nicht veraendern!
- set pg_service_name=Solutio_PostgreSQL16
- set old_pg_version=13
- set acd_path=%solutio_path%\Server\ncjs
- set start_step=%~2
- if "%~1"=="-s" (
- if "%~2"=="" (
- echo Es wurde kein Schritt angegeben.
- exit /b 1
- )
- )
- if "%start_step%"=="2" goto step2
- if "%start_step%"=="3" goto step3
- if "%start_step%"=="4" goto step4
- if "%start_step%"=="5" goto step5
- if "%start_step%"=="6" goto step6
- if "%start_step%"=="7" goto step7
- echo Dieses Skript sollte nur verwendet werden, wenn in Ihrer Datenbank AUSSCHLIESSLICH Solutio Datenbanken existieren und nie etwas an der Installation geaendert wurde.
- echo Falls dies nicht der Fall ist, oder Sie sich nicht sicher sind, verwenden Sie bitte migrate_solutio.bat
- echo ""
- echo Folgende Werte werden verwendet. Bitte pruefen Sie, ob diese zu Ihrem System passen:
- echo solutio_path=%solutio_path%
- echo pg13_path=%pg13_path%
- echo db_dump_dir=%db_dump_dir%
- echo pg16_path=%pg16_path%
- echo pg_port=%pg_port%
- echo Haben Sie alle Werte ueberprueft? Soll die Migration zu Postgres 16 durchgefuehrt werden?
- choice /c JN
- if errorlevel 2 (
- echo Die Migration wird nicht gestartet. Bitte passen Sie die Werte direkt Im oberen Teil des Skriptes an.
- exit /b 1
- )
- set "size=0"
- for /R "%pg13_path%\data\base" %%F in (*) do (
- set /A "size+=%%~zF"
- )
- set /A "folder_size_mb=(size / 1024 / 1024) + 200"
- echo Benoetigter Speicherplatz in %db_dump_dir%: %folder_size_mb% MB
- echo Benoetigter Speicherplatz in %pg16_path%: %folder_size_mb% MB
- echo Haben Sie ueberprueft, ob in den Pfaden jeweils ausreichend Specicherplatz vorhanden ist?
- choice /c JN
- if errorlevel 2 (
- echo Die Migration wird nicht gestartet.
- exit /b 1
- )
- call :get_pg_version %pg13_bin_path%
- if %old_pg_version% gtr 14 (
- echo Sie versuchen, von PosgreSQL Version %old_pg_version% zu migrieren. Dies ist nicht moeglich. Haben Sie die Migration schon einmal ausgefuehrt?
- exit /b 1
- )
- echo Alle Services stoppen
- call %acd_path%\acd.bat stopall
- :step1
- echo.### Step 1: Erzeugen der Datenbank Sicherung aus PostgreSQL 13 (dies wird eine Weile dauern...)
- call "%pg13_path%\bin\pg_dumpall.exe" -U postgres -p %pg_port% -f "%db_dump_path%"
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Erstellen der Datenbank Sicherung mit PostgreSQL 13.
- exit /b 1
- )
- :step2
- echo.### Step 2: Alten PostgreSQL Service stoppen
- call "%pg13_path%\bin\pg_ctl.exe" stop -D "%pg13_path%\data" -m fast
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Stoppen des PostgreSQL 13 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
- exit /b 1
- )
- sc config Solutio_PostgreSQL start=demand
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Deaktivieren des PostgreSQL 9 Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 2 aus
- exit /b 1
- )
- :step3
- echo.### Step 3: PostgreSQL 16 herunterladen
- @echo on
- call powershell Start-BitsTransfer -Source %download_url% %installer_path%
- @echo off
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Herunterladen des PostgreSQL 16 Installers. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 3 aus
- exit /b 1
- )
- :step4
- echo.### Step 4: PostgreSQL 16 installieren
- @echo on
- call "%installer_path%" --superaccount postgres16 --superpassword %pg16_superuser_password% --prefix "%pg16_path%" --datadir "%pg16_path%\data" --servicename %pg_service_name% --enable_acledit 1 --disable-components pgAdmin,stackbuilder --mode unattended --unattendedmodeui minimalWithDialogs
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Installieren von PostgreSQL 16. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 4 aus
- exit /b 1
- )
- @echo off
- call "%pg16_path%\bin\pg_ctl.exe" stop -D "%pg16_path%\data" -m f
- call copy /y "%pg13_path%\data\pg_hba.conf" "%pg16_path%\data\pg_hba.conf"
- :step5
- echo.### Step 5: PostgreSQL 16 starten
- call net start %pg_service_name%
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Starten von PostgreSQL 16. Bitte pruefen Sie die Datei pg_hba.conf. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 5 aus
- call notepad.exe "%pg16_path%\data\pg_hba.conf"
- exit /b 1
- )
- :step6
- echo.### Step 6: Einspielen der Datenbank Sicherung in PostgreSQL 16 (dies wird eine Weile dauern...)
- call "%pg16_path%\bin\psql.exe" -U postgres16 -d postgres -p %pg_port% -f "%db_dump_path%" -c "SELECT '%pg16_superuser_password%';" >NUL
- if %ERRORLEVEL% NEQ 0 (
- echo Fehler beim Einspielen der Daten in die PostgreSQL 16 Datenbanken. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 6 aus
- exit /b 1
- )
- :step7
- echo.### Step 7: Konfiguration der Solutio services
- @echo off
- set KEY_NAME=HKLM\Software\Solutio\Charly\PostgreSQL
- set KEY_NAME_WOW=HKLM\Software\Wow6432Node\Solutio\Charly\PostgreSQL
- set VALUE_NAME=Path
- set VALUE_VERSION=Version
- set NEW_NAME=%pg16_path%
- set NEW_VERSION=16.0
- call reg.exe add "%KEY_NAME%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
- call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_NAME%" /t REG_SZ /d "%NEW_NAME%" /f
- call reg.exe add "%KEY_NAME%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
- call reg.exe add "%KEY_NAME_WOW%" /v "%VALUE_VERSION%" /t REG_SZ /d "%NEW_VERSION%" /f
- rem call net stop ppg
- rem if %ERRORLEVEL% NEQ 0 (
- rem echo Fehler beim Stoppen des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
- rem exit /b 1
- rem )
- REM rename old H2 database from ppg service, then it will be recreated with the new postgres db values
- rename "%solutio_path%\Server\ncjs\database\ppg-service\persistence.mv.db" "persistence_alt.mv.db"
- set "persistence_trace_path=%solutio_path%\Server\ncjs\database\ppg-service\persistence.trace.db"
- if exist "%persistence_trace_path%" (
- rename "%persistence_trace_path%" "persistence_alt.trace.db"
- )
- set "file_path=%solutio_path%\Server\ncjs\conf\ppg\application.yml"
- set "old_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg13_path%"
- set "new_line=de.solutio.ncjs.ppg.service.initialization.customToolsPath: %pg16_path%"
- call :replace "%file_path%" "%old_line%" "%new_line%"
- set "file_path2=%solutio_path%\Server\ncjs\conf2\ppg\application.yml"
- if exist "%file_path2%" (
- call :replace "%file_path2%" "%old_line%" "%new_line%"
- )
- rem call net start ppg
- rem if %ERRORLEVEL% NEQ 0 (
- rem echo Fehler beim Starten des PPG Services. Um erneut bei diesem Schritt zu beginnen, fuehren Sie migrate_all.bat -s 7 aus
- rem exit /b 1
- rem )
- echo Alle Services starten
- call %acd_path%\acd.bat startall
- echo "Database migration completed successfully."
- pause
- exit /b
- :replace
- set "filepath=%~1"
- set "oldline=%~2"
- set "newline=%~3"
- set "temp_file=%TEMP%\temp_file.tmp"
- (for /F "usebackq delims=" %%a in ("%filepath%") do (
- if "%%a"=="%oldline%" (
- echo %newline%
- ) else (
- echo %%a
- )
- )) >"%temp_file%"
- move /y "%temp_file%" "%filepath%"
- exit /b
- :get_pg_version
- set "pg_bin_path=%~1"
- for /f "usebackq tokens=2 delims=. " %%G in (`"%pg_bin_path%\pg_config.exe" --version`) do (
- set "old_pg_version=%%G"
- exit /b
- )
- exit /b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement