Commit Graph

2448 Commits

Author SHA1 Message Date
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
Christoph Engelbert (noctarius)
4f7f469c82 timescaledb: Fixed the licensing for the timescaledb package to be split into TSL (Timescale Community License) and Apache 2.0 components.
TimescaleDB provides two types of licenses, Apache 2.0 and Timescale Community License (TSL), with different feature sets. While all the code is in the same repository, the build
system can build both versions depending on the build parameters set in.

Co-authored-by: Emily Lange <git@indeednotjames.com>
2023-03-24 11:12:12 +01:00
Mario Rodas
9a2e14a323 Merge pull request #222453 from marsam/update-pgvector
postgresqlPackages.pgvector: 0.4.0 -> 0.4.1
2023-03-22 02:39:59 -05:00
Sandro
ffe1c9dc0f postgresqlPackages.pg_repack: use clickable homepage 2023-03-22 00:03:59 +01:00
Mario Rodas
8a449b274a postgresqlPackages.pgvector: 0.4.0 -> 0.4.1 2023-03-21 04:20:00 +00:00
Mario Rodas
81c6568482 postgresqlPackages.plpgsql_check: 2.3.0 -> 2.3.3
https://github.com/okbob/plpgsql_check/releases/tag/v2.3.3
2023-03-14 04:20:00 +00:00
Mario Rodas
dae678ad8f Merge pull request #186276 from typetetris/feature/add-timescaledb-toolkit
timescaledb_toolkit: init at 1.14.0
2023-03-11 06:50:54 -05:00
Mario Rodas
7e29e1b2c2 postgresqlPackages.timescaledb: 2.10.0 -> 2.10.1 2023-03-07 04:20:00 +00:00
Mario Rodas
70fd8b9fb8 Merge pull request #219423 from marsam/update-pg_ivm
postgresqlPackages.pg_ivm: 1.5 -> 1.5.1
2023-03-05 07:32:06 -05:00
Mario Rodas
12d836730a postgresqlPackages.pg_ivm: 1.5 -> 1.5.1
https://github.com/sraoss/pg_ivm/releases/tag/v1.5.1
2023-03-03 04:20:00 +00:00
1000101
c3aaa8fb5e postgresqlPackages.timescaledb: 2.9.3 -> 2.10.0 (#217529) 2023-02-24 06:57:13 -05: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
Mario Rodas
62ad474f0f postgresqlPackages.pg_ivm: 1.4 -> 1.5
https://github.com/sraoss/pg_ivm/releases/tag/v1.5
2023-02-17 04:20:00 +00:00
Eric Wolf
9dc7a05a85 cargo-pgx/timescaledb_toolkit: add nixos test 2023-02-13 10:58:26 +01:00
Eric Wolf
4e189d769b timescaledb-toolkit: init at 1.14.0 2023-02-13 10:58:26 +01:00
github-actions[bot]
87f957b5e2 Merge master into staging-next 2023-02-12 16:02:45 +00:00
Mario Rodas
7fcab962d0 postgresqlPackages.pg_cron: 1.4.2 -> 1.5.1
https://github.com/citusdata/pg_cron/releases/tag/v1.5.0
https://github.com/citusdata/pg_cron/releases/tag/v1.5.1
2023-02-11 04:20:00 +00: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
1000101
64c4077f92 timescaledb: 2.9.2 -> 2.9.3 2023-02-06 18:37:23 +01:00
Mario Rodas
aefde6e88a Merge pull request #213701 from marsam/update-plpgsql_check
postgresqlPackages.plpgsql_check: 2.2.6 -> 2.3.0
2023-01-31 07:34:34 -05:00
Mario Rodas
0ac4b2825c postgresqlPackages.plpgsql_check: 2.2.6 -> 2.3.0
https://github.com/okbob/plpgsql_check/releases/tag/v2.3.0
2023-01-28 04:20:00 +00:00
Mario Rodas
c74d8ff134 postgresqlPackages.pgvector: 0.3.2 -> 0.4.0 2023-01-27 04:20:00 +00:00
Eric Wolf
8e7698746a timescaledb: 2.9.1 -> 2.9.2, comment updated 2023-01-25 16:42:06 +02: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
Eric Wolf
56f3cb523e timescaledb: 2.9.0 -> 2.9.1 2023-01-07 09:00:40 +01:00
Ryan Trinkle
e88449419a postgresqlPackages.temporal_tables: 1.2.0 -> 2021-02-20
Version 1.2.0 was released in 2017, and there have been no releases
since then. However, commit 3ce22da adds support for PostgreSQL 13.

Move the repository owner to `arkhipov`, since it's the one used by PGXN
https://pgxn.org/dist/temporal_tables/
2023-01-04 17:02:58 +00:00
Mario Rodas
ee44c0e028 Merge pull request #206711 from ivan/pgroonga-2.4.2
postgresqlPackages.pgroonga: 2.4.0 -> 2.4.2
2023-01-03 09:22:10 -05:00
Mario Rodas
6688fdf6a4 Merge pull request #206710 from ivan/pg_ivm-1.4
postgresqlPackages.pg_ivm: 1.3 -> 1.4
2023-01-03 09:21:55 -05:00
Mario Rodas
61218848be Merge pull request #206792 from r-ryantm/auto-update/plpgsql_check
postgresql11Packages.plpgsql_check: 2.2.4 -> 2.2.5
2023-01-03 09:19:59 -05:00
Mario Rodas
c1c7ae2d6c postgresqlPackages.plpgsql_check: 2.2.5 -> 2.2.6 2023-01-03 04:20:00 +00:00
Dominic Steinitz
1aaf43022f postgresqlPackages.pgaudit: init at 1.7.0 2022-12-29 15:38:20 +00:00
R. Ryantm
644c9c2f08 postgresql11Packages.pgrouting: 3.3.2 -> 3.4.2 2022-12-27 19:13:19 +00:00
1000101
1b8b20bfc0 postgresqlPackages.timescaledb: 2.8.1 -> 2.9.0 2022-12-19 21:18:03 +01:00
R. Ryantm
c8663bb893 postgresql11Packages.plpgsql_check: 2.2.4 -> 2.2.5 2022-12-19 01:19:02 +00:00
Ivan Kozik
58b20af68b postgresqlPackages.pgroonga: 2.4.0 -> 2.4.2 2022-12-18 13:33:42 +00:00
Ivan Kozik
b3f1fee940 postgresqlPackages.pg_ivm: 1.3 -> 1.4 2022-12-18 13:21:45 +00:00
figsoda
ec8cb34358 treewide: fix typos 2022-12-17 19:39:44 -05:00
Robert Scott
16ae6d6136 Merge pull request #202471 from timothyklim/staging
postgresql_15: build with support for zstd compression
2022-11-26 13:30:30 +00:00
timothy
621bb272a1 postgresql_15: build with support for zstd compression 2022-11-24 09:44:10 +07:00
Mario Rodas
764fb93f37 postgresqlPackages.pgvector: 0.3.0 -> 0.3.2 2022-11-23 04:20:00 +00:00
Mario Rodas
727fcd407e postgresqlPackages.plpgsql_check: 2.2.3 -> 2.2.4
https://github.com/okbob/plpgsql_check/releases/tag/v2.2.4
2022-11-23 04:20:00 +00:00
Mario Rodas
e8ef6a4eb6 postgresqlPackages.postgis: 3.3.1 -> 3.3.2
https://git.osgeo.org/gitea/postgis/postgis/raw/tag/3.3.2/NEWS
2022-11-21 04:20:00 +00:00
Vladimír Čunát
ac95eb6cac Merge branch 'master' into staging-next 2022-11-20 15:44:43 +01:00
Mario Rodas
1b71b2b8fe Merge pull request #202003 from marsam/fix-pg_repack
postgresqlPackages.pg_repack: use release tag
2022-11-20 09:08:41 -05:00
github-actions[bot]
d73198b179 Merge master into staging-next 2022-11-18 18:01:19 +00:00
Krisztian Szabo
6390d01e13 postgresqlPackages.pg_relusage: init at 0.0.1 2022-11-18 13:24:29 +01:00