Vor einiger Zeit hatte ich mich mit der Datenbankmigration von 8 auf 13 über 9 mittels eines batch-skript, drittklassig und amateurhaft geschrieben, professionell umgeschrieben, befasst.
Mich interessiert das herunterladern des Windows-Installers von postgres in seiner neusten Version und seiner Installation über ein batch-Skript.
Ein Teil des Skripts, im Original, lautet
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
das Batch-Skript um von postgres 13 auf 16 zu wechseln lautet
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
wie kann man die postgresql-XX.X-windows-x64.exe in seiner neusten Version über set download_url= runterladen oder gar installieren?
Ich weiß von keiner Möglichkeit sowas dynamisch zu machen.
Aber vielleicht wäre die Verwendung von Paketmanagern wie winget (Microsoft) oder chocolatey eine Alternative? Ich habe keine Erfahrung mit den beiden Tools, und weiß nicht wie schnell die Aktualisierungen (Bugfixes oder neuen Versionen) zur Verfügung stellen. Postgres 16 scheint noch bei keinem der beiden angekommen zu sein.
Wenn Du das dynamisch haben willst, musst Du die Änderungen der Webseite des Anbieters automatisiert analysieren, weil Dir vermutlich niemand garantieren kann, dass der Link, die File ID, der Content usw. immer nach dem gleichen Schema verfügbar sind.
Ein drittes Programm dazwischen zu hängen (Paketmanager) würde m.E. Sinn machen, wenn es auf dem Ziel OS (Windows) ein Standard ist (also sowieso schon installiert oder standardisiert installierbar, Henne-Ei halt).
Das führt dann zu dem Punkt, dass es eigentlich sinnvoll wäre, es über den Windows Store zu installieren. Ich weiß aber nicht, ob der einen standardisierten Mechnismus anbietet. Und Postgres DB bietet er gar nicht an, hab grad kurz nachgeschaut. (Wohl allerdings gibt es dort diverse WSL2 Linux Distributionen per Command Line, die dann wiederum stanardisiert Postgres installieren können, das ist relativ neu und MS seitig ein erstaunliches Entgegenkommen, ein einziges Kommando(! nicht Klick) für eine komplette Linuxinstallation, ein Parameter dazu und es ist nicht mehr die Default Distribution, sondern die selbst gewählte. Nagut, Linux willst Du wahrscheinlich nicht extra dazu installieren)
Und last but not least, wenn Du sowas nutzen oder anbieten willst, machst Du vielleicht einfach selbst ein paar redigierte Permalinks, die Du natürlich dann immer anpassen musst (deren Ziel), wenn die Originaldownloadlocation geändert wird (Stelle oder Inhalt). So etwa wie bei Docker, mit einem …latest Image.
Zunächst nochmal, was du bräuchtest wäre ein “Latest Link”, so wie etwa bei der Postgres Documantation.
versus
versus
usw.
Bei der Doku tut sowas nicht weh. Bei einem Installer / Binaries ist es für den reinen Download auch erstmal egal. Angenommen Du bekommst diesen Link, gibt es keine Garantien, dass das Verhalten des neuen Installers identisch ist zur vorigen Version. Du bist also vielleicht einen Schritt weiter, aber das Thema ist nicht erledigt.
Und wie bereits gesagt: Es hindert Dich niemand, dir eine solche URL selbst zu bauen. Du musst einfach irgendwann das Ziel deines latest links auf den neuen Installer umstellen.