nixos/postgresql: fix enableJIT

Make sure that JIT is actually available when using

    services.postgresql = {
      enable = true;
      enableJIT = true;
      package = pkgs.postgresql_15;
    };

The current behavior is counter-intuitive because the docs state that
`enableJIT = true;` is sufficient even though it wasn't in that case
because the declared package doesn't have the LLVM dependency.

Fixed by using `package.withJIT` if `enableJIT = true;` and
`package.jitSupport` is `false`.

Also updated the postgresql-jit test to test for that case.
This commit is contained in:
Maximilian Bosch 2023-03-25 11:34:24 +01:00
parent a5a715bb24
commit e2fb651752
No known key found for this signature in database
GPG key ID: 9A6EEA275CA5BE0A
2 changed files with 13 additions and 6 deletions

View file

@ -7,9 +7,18 @@ let
cfg = config.services.postgresql;
postgresql =
let
# ensure that
# services.postgresql = {
# enableJIT = true;
# package = pkgs.postgresql_<major>;
# };
# works.
base = if cfg.enableJIT && !cfg.package.jitSupport then cfg.package.withJIT else cfg.package;
in
if cfg.extraPlugins == []
then cfg.package
else cfg.package.withPackages (_: cfg.extraPlugins);
then base
else base.withPackages (_: cfg.extraPlugins);
toStr = value:
if true == value then "yes"

View file

@ -7,9 +7,7 @@ with import ../lib/testing-python.nix { inherit system pkgs; };
let
inherit (pkgs) lib;
packages = lib.filter
(lib.hasSuffix "_jit")
(builtins.attrNames (import ../../pkgs/servers/sql/postgresql pkgs));
packages = builtins.attrNames (import ../../pkgs/servers/sql/postgresql pkgs);
mkJitTest = packageName: makeTest {
name = "${packageName}";
@ -17,8 +15,8 @@ let
nodes.machine = { pkgs, lib, ... }: {
services.postgresql = {
enable = true;
enableJIT = true;
package = pkgs.${packageName};
settings.jit = "on";
initialScript = pkgs.writeText "init.sql" ''
create table demo (id int);
insert into demo (id) select generate_series(1, 5);