Skip to content

Commit e2341f8

Browse files
committed
postgresql: 17 -> 18
1 parent 84c17c3 commit e2341f8

1 file changed

Lines changed: 29 additions & 2 deletions

File tree

modules/postgres.nix

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
lib,
32
config,
3+
lib,
44
pkgs,
55
...
66
}:
@@ -9,6 +9,31 @@ let
99
cfg = config.services.postgresql;
1010
escape = lib.replaceStrings [ ":" ] [ "-" ];
1111
passwordFileName = name: "user-password-${escape name}";
12+
13+
newPostgres = pkgs.postgresql_18;
14+
upgrading = newPostgres.psqlSchema != cfg.package.psqlSchema;
15+
16+
postgres-upgrade = pkgs.writeScriptBin "postgres-upgrade" ''
17+
set -eux
18+
19+
systemctl stop postgresql
20+
21+
export NEWDATA="/var/lib/postgresql/${newPostgres.psqlSchema}"
22+
export NEWBIN="${newPostgres}/bin"
23+
24+
export OLDDATA="${cfg.dataDir}"
25+
export OLDBIN="${cfg.finalPackage}/bin"
26+
27+
install -d -m 0700 -o postgres -g postgres "$NEWDATA"
28+
cd "$NEWDATA"
29+
sudo -u postgres "$NEWBIN/initdb" -D "$NEWDATA" ${lib.escapeShellArgs cfg.initdbArgs}
30+
31+
sudo -u postgres "$NEWBIN/pg_upgrade" \
32+
--old-datadir "$OLDDATA" --new-datadir "$NEWDATA" \
33+
--old-bindir "$OLDBIN" --new-bindir "$NEWBIN" \
34+
--clone \
35+
"$@"
36+
'';
1237
in
1338

1439
{
@@ -18,7 +43,7 @@ in
1843

1944
config = lib.mkIf cfg.enable {
2045
services.postgresql = {
21-
package = pkgs.postgresql_17;
46+
package = pkgs.postgresql_18;
2247
enableTCPIP = true;
2348
ensureUsers = map (db: {
2449
name = db;
@@ -51,6 +76,8 @@ in
5176
''
5277
);
5378

79+
environment.systemPackages = lib.mkIf upgrading [ postgres-upgrade ];
80+
5481
environment.persistence = lib.mkIf config.filesystems.defaultLayout {
5582
"/persistent/data".directories = [ "/var/lib/postgresql" ];
5683
};

0 commit comments

Comments
 (0)