diff --git a/systems/x86_64-linux/mx/postgresql.nix b/systems/x86_64-linux/mx/postgresql.nix index 584635f..fac6f2b 100644 --- a/systems/x86_64-linux/mx/postgresql.nix +++ b/systems/x86_64-linux/mx/postgresql.nix @@ -8,4 +8,33 @@ services.postgresql = { package = pkgs.postgresql_14; }; + + # Temporary: upgrade script for PostgreSQL 14 → 16 migration. + # After upgrading, change package above to postgresql_16 and remove this block. + environment.systemPackages = [ + ( + let + newPostgres = pkgs.postgresql_16; + cfg = config.services.postgresql; + in + pkgs.writeScriptBin "upgrade-pg-cluster" '' + set -eux + systemctl stop postgresql + + export NEWDATA="/var/lib/postgresql/${newPostgres.psqlSchema}" + export NEWBIN="${newPostgres}/bin" + export OLDDATA="${cfg.dataDir}" + export OLDBIN="${cfg.finalPackage}/bin" + + install -d -m 0700 -o postgres -g postgres "$NEWDATA" + cd "$NEWDATA" + sudo -u postgres "$NEWBIN/initdb" -D "$NEWDATA" ${lib.escapeShellArgs cfg.initdbArgs} + + sudo -u postgres "$NEWBIN/pg_upgrade" \ + --old-datadir "$OLDDATA" --new-datadir "$NEWDATA" \ + --old-bindir "$OLDBIN" --new-bindir "$NEWBIN" \ + "$@" + '' + ) + ]; }