postgres-migrate.nix
1 { 2 config, 3 pkgs, 4 ... 5 }: { 6 environment.systemPackages = [ 7 (let 8 # XXX specify the postgresql package you'd like to 9 # upgrade to. Do not forget to list the extensions 10 # you need. 11 newPostgres = pkgs.postgresql_15.withPackages (pp: [ 12 # pp.plv8 13 ]); 14 in 15 pkgs.writeScriptBin "upgrade-pg-cluster" '' 16 set -eux 17 # XXX it's perhaps advisable to stop all services 18 # that depend on postgresql 19 systemctl stop postgresql 20 export NEWDATA="/var/lib/postgresql/${newPostgres.psqlSchema}" 21 export NEWBIN="${newPostgres}/bin" 22 export OLDDATA="${config.services.postgresql.dataDir}" 23 export OLDBIN="${config.services.postgresql.package}/bin" 24 install -d -m 0700 -o postgres -g postgres "$NEWDATA" 25 cd "$NEWDATA" 26 sudo -u postgres $NEWBIN/initdb -D "$NEWDATA" 27 28 sudo -u postgres $NEWBIN/pg_upgrade --old-datadir "$OLDDATA" --new-datadir "$NEWDATA" --old-bindir $OLDBIN --new-bindir $NEWBIN "$@" 29 30 31 32 33 '') 34 ]; 35 }