nixos/postgresql: fix docs on default package

Closes #416595
This commit is contained in:
Maximilian Bosch
2025-06-14 23:25:43 +02:00
parent 7d5069db85
commit e6cc23ba3f
2 changed files with 23 additions and 3 deletions

View File

@@ -21,7 +21,12 @@ To enable PostgreSQL, add the following to your {file}`configuration.nix`:
services.postgresql.package = pkgs.postgresql_15; services.postgresql.package = pkgs.postgresql_15;
} }
``` ```
Note that you are required to specify the desired version of PostgreSQL (e.g. `pkgs.postgresql_15`). Since upgrading your PostgreSQL version requires a database dump and reload (see below), NixOS cannot provide a default value for [](#opt-services.postgresql.package) such as the most recent release of PostgreSQL.
The default PostgreSQL version is approximately the latest major version available on the NixOS release
matching your [`system.stateVersion`](#opt-system.stateVersion).
This is because PostgreSQL upgrades require a manual migration process (see below).
Hence, upgrades must happen by setting [`services.postgresql.package`](#opt-services.postgresql.package)
explicitly.
<!-- <!--
After running {command}`nixos-rebuild`, you can verify After running {command}`nixos-rebuild`, you can verify

View File

@@ -120,8 +120,22 @@ in
enableJIT = mkEnableOption "JIT support"; enableJIT = mkEnableOption "JIT support";
package = mkPackageOption pkgs "postgresql" { package = mkOption {
example = "postgresql_15"; type = types.package;
example = literalExpression "pkgs.postgresql_15";
defaultText = literalExpression ''
if versionAtLeast config.system.stateVersion "24.11" then
pkgs.postgresql_16
else if versionAtLeast config.system.stateVersion "23.11" then
pkgs.postgresql_15
else if versionAtLeast config.system.stateVersion "22.05" then
pkgs.postgresql_14
else
pkgs.postgresql_13
'';
description = ''
The package being used by postgresql.
'';
}; };
finalPackage = mkOption { finalPackage = mkOption {
@@ -656,6 +670,7 @@ in
See also https://endoflife.date/postgresql See also https://endoflife.date/postgresql
''; '';
base = base =
# XXX Don't forget to keep `defaultText` of `services.postgresql.package` up to date!
if versionAtLeast config.system.stateVersion "24.11" then if versionAtLeast config.system.stateVersion "24.11" then
pkgs.postgresql_16 pkgs.postgresql_16
else if versionAtLeast config.system.stateVersion "23.11" then else if versionAtLeast config.system.stateVersion "23.11" then