Commit Graph

305 Commits

Author SHA1 Message Date
Mario Rodas
c7a1eb3332 postgresql_13: 13.12 -> 13.13
Changelog: https://www.postgresql.org/docs/release/13.13/
2023-11-10 04:20:00 +00:00
Mario Rodas
1abcce65a9 postgresql_12: 12.16 -> 12.17
Changelog: https://www.postgresql.org/docs/release/12.17/
2023-11-10 04:20:00 +00:00
Mario Rodas
8a770420d4 postgresql: add changelog to meta 2023-11-10 04:20:00 +00:00
github-actions[bot]
97868dae8e
Merge master into staging-next 2023-10-31 06:00:58 +00:00
Maximilian Bosch
1220a4d4dd
postgresql_11: remove
As described in the release lifecycle docs from postgresql[1], v11 will
stop receiving fixes as of Nov 9 2023. This means it's EOL throughout
the entire lifetime of 23.11, so let's drop it now.

A lot of examples are also referencing postgresql_11. Where it's
sensible, use postgresql_15 as example now to avoid confusion.

This is also handy because the LLVM 16 fix for postgresql is not
available for postgresql 11 ;-)

[1] https://www.postgresql.org/support/versioning/
2023-10-30 10:41:16 +01:00
Maximilian Bosch
8fbd381b8a
postgresql_jit: fix build
Failing Hydra build: https://hydra.nixos.org/build/239477682/nixlog/1

This got fixed upstream already in the release branches, applying the
patches here solves the issue.

This skips v11 since there's no patch available and it will be dropped
soon anyways[1].

[1] #264250
2023-10-29 23:58:28 +01:00
Meet Barot
19a4154a7c postgresql: Add meta.pkgConfigModules and test 2023-10-16 00:36:24 -04:00
Mario Rodas
eb745fa4d7
Merge pull request #259734 from marsam/postgresql-update-extensions
postgresql: update extensions
2023-10-10 08:35:15 -05:00
Yureka
8a0223ec08
postgresql: reorganize musl patches (#260067)
This also adds support for building postgresql 15 and 16 under musl.
2023-10-10 00:51:44 +02:00
Mario Rodas
9bd59c622a postgresql: add dlSuffix to passthru
PostgreSQL changed the extension of its extensions in Darwin to use .dylib [1]

[1] b55f62abb2
2023-09-22 04:20:00 +00:00
Steve Purcell
ae5b96f3ab postgresql_16: init at 16.0 2023-09-16 18:19:06 +02:00
github-actions[bot]
4a9909e0db
Merge master into staging-next 2023-08-19 00:01:42 +00:00
Sean D Gillespie
acc01be813 postgresql: fix musl patches 2023-08-18 13:16:14 -05:00
ajs124
061c96b486 postgresql_15: 15.3 -> 15.4
https://www.postgresql.org/docs/release/15.4/
2023-08-10 23:19:35 -05:00
ajs124
8f5976b479 postgresql_14: 14.8 -> 14.9
https://www.postgresql.org/docs/release/14.9/
2023-08-10 23:19:35 -05:00
ajs124
f256648786 postgresql_13: 13.11 -> 13.12
https://www.postgresql.org/docs/release/13.12/
2023-08-10 23:19:35 -05:00
ajs124
363048444b postgresql_12: 12.15 -> 12.16
https://www.postgresql.org/docs/release/12.16/
2023-08-10 23:19:35 -05:00
ajs124
b606993d67 postgresql_11: 11.20 -> 11.21
https://www.postgresql.org/docs/release/11.21/
2023-08-10 23:19:35 -05:00
Maximilian Bosch
c92f3af69d
Merge pull request #228349 from yu-re-ka/musl-postgresql
pkgsMusl.postgresql: fix build
2023-06-07 18:30:16 +02:00
Yureka
8d4a81b185 pkgsMusl.postgresql: fix build 2023-05-28 19:51:06 +02:00
github-actions[bot]
a0ba80a626
Merge staging-next into staging 2023-05-12 18:01:54 +00:00
Alyssa Ross
5e06b3cb19 treewide: don't use rustPlatform.rust
This will be deprecated in the next commit.
2023-05-12 15:31:21 +00:00
ajs124
3abafec08f postgresql_15: 15.2 -> 15.3
https://www.postgresql.org/docs/release/15.3/
2023-05-12 13:40:01 +02:00
ajs124
08b8054366 postgresql_14: 14.7 -> 14.8
https://www.postgresql.org/docs/release/14.8/
2023-05-12 13:40:01 +02:00
ajs124
370e6c896d postgresql_13: 13.10 -> 13.11
https://www.postgresql.org/docs/release/13.11/
2023-05-12 13:40:01 +02:00
ajs124
b201c295c7 postgresql_12: 12.14 -> 12.15
https://www.postgresql.org/docs/release/12.15/
2023-05-12 13:40:01 +02:00
ajs124
c56299151c postgresql_11: 11.19 -> 11.20
https://www.postgresql.org/docs/release/11.20/
2023-05-12 13:40:01 +02:00
Maximilian Bosch
9f2b4357c1
postgresql: save rebuilds of existing packages
...by using `+ lib.optionalString ...` rather than a substitution. That
way the phases don't have additional trailing white-spaces in the
non-JIT case which cause rebuilds.
2023-03-29 08:39:47 +02:00
Maximilian Bosch
a5a715bb24
postgresql_jit: fix darwin build
So, patchelf works on ELF files and these don't exist on Darwin. I'm not
aware of any other way to eliminate all references of the executable's
body while preserving library paths in the header. This still works, the
only problem is that darwin has a dependency on llvm.dev, so it's
runtime closure is larger.
2023-03-29 08:39:47 +02:00
Maximilian Bosch
43dbeae02d
postgresql: pass through JIT-enabled variant of non-JIT postgres and vice versa
This is useful if your postgresql version is dependant on
`system.stateVersion` and not pinned down manually. Then it's not
necessary to find out which version exactly is in use and define
`package` manually, but just stay with what NixOS provides as default:

    $ nix-instantiate -A postgresql
    /nix/store/82fzmb77mz2b787dgj7mn4a8i4f6l6sn-postgresql-14.7.drv
    $ nix-instantiate -A postgresql_jit
    /nix/store/qsjkb72fcrrfpsszrwbsi9q9wgp39m50-postgresql-14.7.drv
    $ nix-instantiate -A postgresql.withJIT
    /nix/store/qsjkb72fcrrfpsszrwbsi9q9wgp39m50-postgresql-14.7.drv
    $ nix-instantiate -A postgresql.withJIT.withoutJIT
    /nix/store/82fzmb77mz2b787dgj7mn4a8i4f6l6sn-postgresql-14.7.drv

I.e. you can use postgresql with JIT (for complex queries only[1]) like
this:

    services.postgresql = {
      enable = true;
      enableJIT = true;
    };

Performing a new override instead of re-using the `_jit`-variants for
that has the nice property that overlays for the original package apply
to the JIT-enabled variant, i.e.

    with import ./. {
      overlays = [
        (self: super: {
          postgresql = super.postgresql.overrideAttrs (_: { fnord = "snens"; });
        })
      ];
    };
    postgresql.withJIT.fnord

still gives the string `snens` whereas `postgresql_jit` doesn't have the
attribute `fnord` in its derivation.

[1] https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-JIT-ABOVE-COST
2023-03-29 08:39:46 +02:00
Maximilian Bosch
2282fa73a1
postgresql: implement opt-in JIT support
Closes #150801

Note: I decided against resuming directly on #150801 because the
conflict was too big (and resolving it seemed too error-prone to me).
Also the `this`-refactoring could be done in an easier manner, i.e. by
exposing JIT attributes with the correct configuration. More on that
below.

This patch creates variants of the `postgresql*`-packages with JIT[1]
support. Please note that a lot of the work was derived from previous
patches filed by other contributors, namely dasJ, andir and abbradar,
hence the co-authored-by tags below.

Effectively, the following things have changed:

* For JIT variants an LLVM-backed stdenv with clang is now used as
  suggested by dasJ[2]. We need LLVM and CLang[3] anyways to build the
  JIT-part, so no need to mix this up with GCC's stdenv. Also, using the
  `dev`-output of LLVM and clang's stdenv for building (and adding llvm
  libs as build-inputs) seems more cross friendly to me (which will
  become useful when cross-building for JIT-variants will actually be
  supported).

* Plugins inherit the build flags from the Makefiles in
  `$out/lib/pgxs/src` (e.g. `-Werror=unguarded-availability-new`). Since
  some of the flags are clang-specific (and stem from the use of the
  CLang stdenv) and don't work on gcc, the stdenv of `pkgs.postgresql`
  is passed to the plugins. I.e., plugins for non-JIT variants are built
  with a gcc stdenv on Linux and plugins for JIT variants with a clang
  stdenv.

  Since `plv8` hard-codes `gcc` as `$CC` in its Makefile[4], I marked it
  as broken for JIT-variants of postgresql only.

* Added a test-matrix to confirm that JIT works fine on each
  `pkgs.postgresql_*_jit` (thanks Andi for the original test in
  #124804!).

* For each postgresql version, a new attribute
  `postgresql_<version>_jit` (and a corresponding
  `postgresqlPackages<version>JitPackages`) are now exposed for better
  discoverability and prebuilt artifacts in the binary cache.

* In #150801 the `this`-argument was replaced by an internal recursion.
  I decided against this approach because it'd blow up the diff even
  more which makes the readability way harder and also harder to revert
  this if necessary.

  Instead, it is made sure that `this` always points to the correct
  variant of `postgresql` and re-using that in an additional
  `.override {}`-expression is trivial because the JIT-variant is
  exposed in `all-packages.nix`.

* I think the changes are sufficiently big to actually add myself as
  maintainer here.

* Added `libxcrypt` to `buildInputs` for versions <v13. While
  building things with an LLVM stdenv, these versions complained that
  the extern `crypt()` symbol can't be found. Not sure what this is
  exactly about, but since we want to switch to libxcrypt for `crypt()`
  usage anyways[5] I decided to add it. For >=13 it's not relevant
  anymore anyways[6].

* JIT support doesn't work with cross-compilation. It is attempted to
  build LLVM-bytecode (`%.bc` is the corresponding `make(1)`-rule) for
  each sub-directory in `backend/` for the JIT apparently, but with a
  $(CLANG) that can produce binaries for the build, not the host-platform.

  I managed to get a cross-build with JIT support working with
  `depsBuildBuild = [ llvmPackages.clang ] ++ buildInputs`, but
  considering that the resulting LLVM IR isn't platform-independent this
  doesn't give you much. In fact, I tried to test the result in a VM-test,
  but as soon as JIT was used to optimize a query, postgres would
  coredump with `Illegal instruction`.

A common concern of the original approach - with llvm as build input -
was the massive increase of closure size. With the new approach of using
the LLVM stdenv directly and patching out references to the clang drv in
`$out` the effective closure size changes are:

    $ nix path-info -Sh $(nix-build -A postgresql_14)
    /nix/store/kssxxqycwa3c7kmwmykwxqvspxxa6r1w-postgresql-14.7	306.4M
    $ nix path-info -Sh $(nix-build -A postgresql_14_jit)
    /nix/store/xc7qmgqrn4h5yr4vmdwy56gs4bmja9ym-postgresql-14.7	689.2M

Most of the increase in closure-size stems from the `lib`-output of
LLVM

    $ nix path-info -Sh /nix/store/5r97sbs5j6mw7qnbg8nhnq1gad9973ap-llvm-11.1.0-lib
    /nix/store/5r97sbs5j6mw7qnbg8nhnq1gad9973ap-llvm-11.1.0-lib	349.8M

which is why this shouldn't be enabled by default.

While this is quite much because of LLVM, it's still a massive
improvement over the simple approach of adding llvm/clang as
build-inputs and building with `--with-llvm`:

    $ nix path-info -Sh $(nix-build -E '
	with import ./. {};
	postgresql.overrideAttrs ({ configureFlags ? [], buildInputs ? [], ... }: {
	  configureFlags = configureFlags ++ [ "--with-llvm" ];
	  buildInputs = buildInputs ++ [ llvm clang ];
	})' -j0)
    /nix/store/i3bd2r21c6c3428xb4gavjnplfqxn27p-postgresql-14.7	  1.6G

Co-authored-by: Andreas Rammhold <andreas@rammhold.de>
Co-authored-by: Janne Heß <janne@hess.ooo>
Co-authored-by: Nikolay Amiantov <ab@fmap.me>

[1] https://www.postgresql.org/docs/current/jit-reason.html
[2] https://github.com/NixOS/nixpkgs/pull/124804#issuecomment-864616931
    & https://github.com/NixOS/nixpkgs/pull/150801#issuecomment-1467868321
[3] This fails with the following error otherwise:
    ```
    configure: error: clang not found, but required when compiling --with-llvm, specify with CLANG=
    ```
[4] https://github.com/plv8/plv8/blob/v3.1.5/Makefile#L14
[5] https://github.com/NixOS/nixpkgs/pull/181764
[6] c45643d618
2023-03-29 08:39:46 +02:00
Artturin
f9fdf2d402 treewide: move NIX_CFLAGS_COMPILE to the env attrset
with structuredAttrs lists will be bash arrays which cannot be exported
which will be a issue with some patches and some wrappers like cc-wrapper

this makes it clearer that NIX_CFLAGS_COMPILE must be a string as lists
in env cause a eval failure
2023-02-22 21:23:04 +02:00
ajs124
940b7d4ee1 postgresql_15: 15.1 -> 15.2
https://www.postgresql.org/docs/release/15.2/
2023-02-09 19:24:02 +01:00
ajs124
894c6a5756 postgresql_14: 14.6 -> 14.7
https://www.postgresql.org/docs/release/14.7/
2023-02-09 19:23:49 +01:00
ajs124
b908126eaa postgresql_13: 13.9 -> 13.10
https://www.postgresql.org/docs/release/13.10/
2023-02-09 19:23:29 +01:00
ajs124
0304c27c11 postgresql_12: 12.13 -> 12.14
https://www.postgresql.org/docs/release/12.14/
2023-02-09 19:23:14 +01:00
ajs124
8aee83b4af postgresql_11: 11.18 -> 11.19
https://www.postgresql.org/docs/release/11.19/
2023-02-09 19:22:49 +01:00
Alyssa Ross
e88859c53c postgresql: fix enableSystemd on other Unixes
It's not just Darwin that doesn't have systemd.
2023-01-18 12:14:49 +00:00
figsoda
ec8cb34358 treewide: fix typos 2022-12-17 19:39:44 -05:00
timothy
621bb272a1 postgresql_15: build with support for zstd compression 2022-11-24 09:44:10 +07:00
Mario Rodas
b38cf2c9ae postgresql_15: 15.0 -> 15.1
https://www.postgresql.org/docs/release/15.1/
2022-11-11 04:20:00 +00:00
Mario Rodas
9a0ebf5d47 postgresql_14: 14.5 -> 14.6
https://www.postgresql.org/docs/release/14.6/
2022-11-11 04:20:00 +00:00
Mario Rodas
4fc31c2539 postgresql_13: 13.8 -> 13.9
https://www.postgresql.org/docs/release/13.9/
2022-11-11 04:20:00 +00:00
Mario Rodas
0e7dc2534e postgresql_12: 12.12 -> 12.13
https://www.postgresql.org/docs/release/12.13/
2022-11-11 04:20:00 +00:00
Mario Rodas
06a7064ec3 postgresql_11: 11.17 -> 11.18
https://www.postgresql.org/docs/release/11.18/
2022-11-11 04:20:00 +00:00
Jan Tojnar
76bd24f8fc postgresql: remove code for no longer supported versions 2022-11-01 12:33:14 +01:00
github-actions[bot]
cc090d2b94
Merge master into staging-next 2022-10-14 12:01:35 +00:00
Justin Wood
fbe3995298 postgresql_15: init at 15.0
https://www.postgresql.org/docs/15/release-15.html
2022-10-13 11:56:40 -04:00
Mario Rodas
405db07799
Merge pull request #167047 from helsinki-systems/drop/postgresql10
postgresql: remove 10.x
2022-10-06 21:32:46 -05:00
Artturi
79c42aa06c
Merge pull request #186564 from Artturin/crossevalfixes
Fixes for cross-compilation
2022-08-27 17:49:00 +03:00