From 1f5ae130f53f93e1bac9736000688354571be00f Mon Sep 17 00:00:00 2001 From: alejandro-angulo Date: Sat, 12 Jul 2025 10:31:56 -0700 Subject: [PATCH] Upgrade to postgresql 17 --- modules/nixos/services/postgresql/default.nix | 52 +++++++++++++++++++ systems/x86_64-linux/node/default.nix | 6 +++ 2 files changed, 58 insertions(+) create mode 100644 modules/nixos/services/postgresql/default.nix diff --git a/modules/nixos/services/postgresql/default.nix b/modules/nixos/services/postgresql/default.nix new file mode 100644 index 0000000..14bd355 --- /dev/null +++ b/modules/nixos/services/postgresql/default.nix @@ -0,0 +1,52 @@ +{ + config, + lib, + pkgs, + namespace, + ... +}: +let + cfg = config.${namespace}.services.postgresql; + postgresql_cfg = config.services.postgresql; +in +{ + options.${namespace}.services.postgresql = { + upgradeScript = { + enable = lib.mkEnableOption "postgres upgrade script (see here: https://nixos.org/manual/nixos/stable/#module-services-postgres-upgrading"; + newVersion = lib.mkOption { + type = lib.types.package; + description = "Version of postgres to upgrade to"; + }; + currentVersion = lib.mkOption { + type = lib.types.package; + description = "Current postgres version"; + default = postgresql_cfg.package; + }; + }; + }; + + config = lib.mkIf cfg.upgradeScript.enable { + environment.systemPackages = [ + (pkgs.writeScriptBin "upgrade-pg-cluster" '' + set -eux + systemctl stop postgresql + + export NEWDATA="/var/lib/postgresql/${cfg.upgradeScript.newVersion.psqlSchema}" + export NEWBIN="${cfg.upgradeScript.newVersion}/bin" + + export OLDDATA="${postgresql_cfg.dataDir}" + export OLDBIN="${postgresql_cfg.finalPackage}/bin" + + install -d -m 0700 -o postgres -g postgres "$NEWDATA" + cd "$NEWDATA" + sudo -u postgres "$NEWBIN/initdb" -D "$NEWDATA" ${lib.escapeShellArgs postgresql_cfg.initdbArgs} + + sudo -u postgres "$NEWBIN/pg_upgrade" \ + --old-datadir "$OLDDATA" --new-datadir "$NEWDATA" \ + --old-bindir "$OLDBIN" --new-bindir "$NEWBIN" \ + "$@" + '') + ]; + + }; +} diff --git a/systems/x86_64-linux/node/default.nix b/systems/x86_64-linux/node/default.nix index 563a0ea..15c438a 100644 --- a/systems/x86_64-linux/node/default.nix +++ b/systems/x86_64-linux/node/default.nix @@ -37,6 +37,10 @@ enable = true; enableServer = true; }; + services.postgresql.upgradeScript = { + enable = false; + newVersion = pkgs.postgresql_17; + }; services.loki.enable = true; services.promtail.enable = true; services.teslamate = { @@ -108,6 +112,8 @@ ]; }; + services.postgresql.package = pkgs.postgresql_17; + # List packages installed in system profile. To search, run: # $ nix search wget environment.systemPackages = with pkgs; [