about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/sql/postgresql/ext
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/sql/postgresql/ext')
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/age.nix75
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/anonymizer.nix32
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/apache_datasketches.nix77
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/citus.nix52
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/cstore_fdw.nix33
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/default.nix107
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/h3-pg.nix76
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/hypopg.nix29
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/jsonb_deep_sum.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/lantern.nix79
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/periods.nix29
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_auto_failover.nix32
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_bigm.nix39
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_cron.nix32
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_ed25519.nix32
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_embedding.nix29
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_hint_plan.nix58
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_hll.nix30
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_ivm.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_net.nix34
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_partman.nix34
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_rational.nix39
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_relusage.nix29
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_repack.nix66
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_safeupdate.nix28
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_similarity.nix32
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_squeeze.nix67
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_topn.nix32
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pg_uuidv7.nix34
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgaudit.nix56
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgjwt.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgroonga.nix44
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgrouting.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgsodium.nix73
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgsql-http.nix30
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgtap.nix65
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/0001-read-clang-flags-from-environment.diff19
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/Cargo.lock3626
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/default.nix102
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/pgvector.nix30
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/plpgsql_check.nix46
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/plr.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/0001-build-Allow-using-V8-from-system.patch47
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/default.nix144
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/postgis.nix87
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/promscale_extension.nix59
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/repmgr.nix46
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/rum.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/smlar.nix30
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/tds_fdw.nix33
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/temporal_tables.nix29
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/timescaledb.nix44
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/timescaledb_toolkit.nix48
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/tsearch_extras.nix28
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/tsja.nix45
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/ext/wal2json.nix31
56 files changed, 6184 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/age.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/age.nix
new file mode 100644
index 000000000000..fb5d84992582
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/age.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, bison, fetchFromGitHub, flex, perl, postgresql }:
+
+let
+  hashes = {
+    "16" = "sha256-sXh/vmGyYj00ALfFVdeql2DZ6nCJQDNKyNgzlOZnPAw=";
+    "15" = "sha256-webZWgWZGnSoXwTpk816tjbtHV1UIlXkogpBDAEL4gM=";
+    "14" = "sha256-jZXhcYBubpjIJ8M5JHXKV5f6VK/2BkypH3P7nLxZz3E=";
+    "13" = "sha256-HR6nnWt/V2a0rD5eHHUsFIZ1y7lmvLz36URt9pPJnCw=";
+    "12" = "sha256-JFNk17ESsIt20dwXrfBkQ5E6DbZzN/Q9eS6+WjCXGd4=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "age";
+  version = "1.5.0-rc0";
+
+  src = fetchFromGitHub {
+    owner = "apache";
+    repo = "age";
+    rev = "PG${lib.versions.major postgresql.version}/v${builtins.replaceStrings ["."] ["_"] version}";
+    hash = hashes.${lib.versions.major postgresql.version} or (throw "Source for Age is not available for ${postgresql.version}");
+  };
+
+  buildInputs = [ postgresql ];
+
+  makeFlags = [
+    "BISON=${bison}/bin/bison"
+    "FLEX=${flex}/bin/flex"
+    "PERL=${perl}/bin/perl"
+  ];
+
+  installPhase = ''
+    install -D -t $out/lib *${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  passthru.tests = stdenv.mkDerivation {
+    inherit version src;
+
+    pname = "age-regression";
+
+    dontConfigure = true;
+
+    buildPhase = let
+      postgresqlAge = postgresql.withPackages (ps: [ ps.age ]);
+    in ''
+      # The regression tests need to be run in the order specified in the Makefile.
+      echo -e "include Makefile\nfiles:\n\t@echo \$(REGRESS)" > Makefile.regress
+      REGRESS_TESTS=$(make -f Makefile.regress files)
+
+      ${postgresql}/lib/pgxs/src/test/regress/pg_regress \
+        --inputdir=./ \
+        --bindir='${postgresqlAge}/bin' \
+        --encoding=UTF-8 \
+        --load-extension=age \
+        --inputdir=./regress --outputdir=./regress --temp-instance=./regress/instance \
+        --port=61958 --dbname=contrib_regression \
+        $REGRESS_TESTS
+    '';
+
+    installPhase = ''
+      touch $out
+    '';
+  };
+
+  meta = with lib; {
+    broken = !builtins.elem (versions.major postgresql.version) (builtins.attrNames hashes);
+    description = "A graph database extension for PostgreSQL";
+    homepage = "https://age.apache.org/";
+    changelog = "https://github.com/apache/age/raw/v${src.rev}/RELEASE";
+    maintainers = with maintainers; [ ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/anonymizer.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/anonymizer.nix
new file mode 100644
index 000000000000..4bb5aa544440
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/anonymizer.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, pg-dump-anon, postgresql, runtimeShell, jitSupport, llvm }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "postgresql_anonymizer";
+
+  inherit (pg-dump-anon) version src passthru;
+
+  buildInputs = [ postgresql ];
+  nativeBuildInputs = [ postgresql ] ++ lib.optional jitSupport llvm;
+
+  strictDeps = true;
+
+  makeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "datadir=${placeholder "out"}/share/postgresql"
+    "pkglibdir=${placeholder "out"}/lib"
+    "DESTDIR="
+  ];
+
+  postInstall = ''
+    cat >$out/bin/pg_dump_anon.sh <<'EOF'
+    #!${runtimeShell}
+    echo "This script is deprecated by upstream. To use the new script,"
+    echo "please install pkgs.pg-dump-anon."
+    exit 1
+    EOF
+  '';
+
+  meta = lib.getAttrs [ "homepage" "maintainers" "license" ] pg-dump-anon.meta // {
+    description = "Extension to mask or replace personally identifiable information (PII) or commercially sensitive data from a PostgreSQL database";
+  };
+})
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/apache_datasketches.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/apache_datasketches.nix
new file mode 100644
index 000000000000..e146ec04175e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/apache_datasketches.nix
@@ -0,0 +1,77 @@
+{ stdenv, lib, fetchFromGitHub, postgresql, boost182, nixosTests }:
+
+let
+  version = "1.6.0";
+
+  main_src = fetchFromGitHub {
+    name   = "datasketches-postgresql";
+    owner  = "apache";
+    repo   = "datasketches-postgresql";
+    rev    = "refs/tags/${version}";
+    hash   = "sha256-sz94fIe7nyWhjiw8FAm6ZzVpB0sAK5YxUrtbaZt/guA=";
+  };
+
+  cpp_src = fetchFromGitHub {
+    name   = "datasketches-cpp";
+    owner  = "apache";
+    repo   = "datasketches-cpp";
+    rev    = "refs/tags/4.1.0";
+    hash   = "sha256-vPoFzRxOXlEAiiHH9M5S6255ahzaKsGNYS0cdHwrRYw=";
+  };
+in
+
+stdenv.mkDerivation {
+  pname = "apache_datasketches";
+  inherit version;
+
+  srcs = [ main_src cpp_src ];
+
+  sourceRoot = main_src.name;
+
+  buildInputs = [ postgresql boost182 ];
+
+  patchPhase = ''
+    runHook prePatch
+    cp -r ../${cpp_src.name} .
+    runHook postPatch
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D -m 644 ./datasketches.so -t $out/lib/
+    cat \
+      sql/datasketches_cpc_sketch.sql \
+      sql/datasketches_kll_float_sketch.sql \
+      sql/datasketches_kll_double_sketch.sql \
+      sql/datasketches_theta_sketch.sql \
+      sql/datasketches_frequent_strings_sketch.sql \
+      sql/datasketches_hll_sketch.sql \
+      sql/datasketches_aod_sketch.sql \
+      sql/datasketches_req_float_sketch.sql \
+      sql/datasketches_quantiles_double_sketch.sql \
+      > sql/datasketches--${version}.sql
+    install -D -m 644 ./datasketches.control -t $out/share/postgresql/extension
+    install -D -m 644 \
+      ./sql/datasketches--${version}.sql \
+      ./sql/datasketches--1.3.0--1.4.0.sql \
+      ./sql/datasketches--1.4.0--1.5.0.sql \
+      ./sql/datasketches--1.5.0--1.6.0.sql \
+      -t $out/share/postgresql/extension
+    runHook postInstall
+  '';
+
+  passthru.tests.apache_datasketches = nixosTests.apache_datasketches;
+
+  meta = {
+    description = "PostgreSQL extension providing approximate algorithms for distinct item counts, quantile estimation and frequent items detection";
+    longDescription = ''
+       apache_datasketches is an extension to support approximate algorithms on PostgreSQL. The implementation
+       is based on the Apache Datasketches CPP library, and provides support for HyperLogLog,
+       Compressed Probabilistic Counting, KLL, Frequent strings, and Theta sketches.
+    '';
+    homepage = "https://datasketches.apache.org/";
+    platforms = postgresql.meta.platforms;
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ mmusnjak ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/citus.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/citus.nix
new file mode 100644
index 000000000000..b5e8cfbeebcc
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/citus.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, curl
+, fetchFromGitHub
+, lz4
+, postgresql
+}:
+
+stdenv.mkDerivation rec {
+  pname = "citus";
+  version = "12.1.2";
+
+  src = fetchFromGitHub {
+    owner = "citusdata";
+    repo = "citus";
+    rev = "v${version}";
+    hash = "sha256-0uYNMLAYigtGlDRvOEkQeC5i58QfXcdSVjTQwWVFX+8=";
+  };
+
+  buildInputs = [
+    curl
+    lz4
+    postgresql
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -t $out/lib src/backend/columnar/citus_columnar${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension src/backend/columnar/build/sql/*.sql
+    install -D -t $out/share/postgresql/extension src/backend/columnar/*.control
+
+    install -D -t $out/lib src/backend/distributed/citus${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension src/backend/distributed/build/sql/*.sql
+    install -D -t $out/share/postgresql/extension src/backend/distributed/*.control
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    # "Our soft policy for Postgres version compatibilty is to support Citus'
+    # latest release with Postgres' 3 latest releases."
+    # https://www.citusdata.com/updates/v12-0/#deprecated_features
+    broken = versionOlder postgresql.version "14";
+    description = "Distributed PostgreSQL as an extension";
+    homepage = "https://www.citusdata.com/";
+    changelog = "https://github.com/citusdata/citus/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ marsam ];
+    inherit (postgresql.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/cstore_fdw.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/cstore_fdw.nix
new file mode 100644
index 000000000000..c9f01190c912
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/cstore_fdw.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, postgresql, protobufc }:
+
+stdenv.mkDerivation rec {
+  pname = "cstore_fdw";
+  version = "unstable-2022-03-08";
+
+  nativeBuildInputs = [ protobufc ];
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "cstore_fdw";
+    rev    = "90e22b62fbee6852529104fdd463f532cf7a3311";
+    sha256 = "sha256-02wcCqs8A5ZOZX080fgcNJTQrYQctnlwnA8+YPaRTZc=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/postgresql/extension}
+
+    cp *.so      $out/lib
+    cp *.sql     $out/share/postgresql/extension
+    cp *.control $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    broken      = versionAtLeast postgresql.version "14";
+    description = "Columnar storage for PostgreSQL";
+    homepage    = "https://github.com/citusdata/cstore_fdw";
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/default.nix
new file mode 100644
index 000000000000..b6181da6cf02
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/default.nix
@@ -0,0 +1,107 @@
+self: super: {
+
+    age = super.callPackage ./age.nix { };
+
+    anonymizer = super.callPackage ./anonymizer.nix { };
+
+    apache_datasketches = super.callPackage ./apache_datasketches.nix { };
+
+    citus = super.callPackage ./citus.nix { };
+
+    h3-pg = super.callPackage ./h3-pg.nix { };
+
+    hypopg = super.callPackage ./hypopg.nix { };
+
+    jsonb_deep_sum = super.callPackage ./jsonb_deep_sum.nix { };
+
+    lantern = super.callPackage ./lantern.nix { };
+
+    periods = super.callPackage ./periods.nix { };
+
+    postgis = super.callPackage ./postgis.nix { };
+
+    pg_auto_failover = super.callPackage ./pg_auto_failover.nix { };
+
+    pg_bigm = super.callPackage ./pg_bigm.nix { };
+
+    pg_ed25519 = super.callPackage ./pg_ed25519.nix { };
+
+    pg_embedding = super.callPackage ./pg_embedding.nix { };
+
+    pg_hint_plan = super.callPackage ./pg_hint_plan.nix { };
+
+    pg_ivm = super.callPackage ./pg_ivm.nix { };
+
+    pg_rational = super.callPackage ./pg_rational.nix { };
+
+    pg_repack = super.callPackage ./pg_repack.nix { };
+
+    pg_similarity = super.callPackage ./pg_similarity.nix { };
+
+    pgaudit = super.callPackage ./pgaudit.nix { };
+
+    pgroonga = super.callPackage ./pgroonga.nix { };
+
+    pgsodium = super.callPackage ./pgsodium.nix { };
+
+    pgsql-http = super.callPackage ./pgsql-http.nix { };
+
+    pgvecto-rs = super.callPackage ./pgvecto-rs { };
+
+    pgvector = super.callPackage ./pgvector.nix { };
+
+    plpgsql_check = super.callPackage ./plpgsql_check.nix { };
+
+    plr = super.callPackage ./plr.nix { };
+
+    plv8 = super.callPackage ./plv8 { };
+
+    pgjwt = super.callPackage ./pgjwt.nix { };
+
+    cstore_fdw = super.callPackage ./cstore_fdw.nix { };
+
+    pg_hll = super.callPackage ./pg_hll.nix { };
+
+    pg_cron = super.callPackage ./pg_cron.nix { };
+
+    pg_topn = super.callPackage ./pg_topn.nix { };
+
+    pg_net = super.callPackage ./pg_net.nix { };
+
+    pgtap = super.callPackage ./pgtap.nix { };
+
+    smlar = super.callPackage ./smlar.nix { };
+
+    temporal_tables = super.callPackage ./temporal_tables.nix { };
+
+    timescaledb = super.callPackage ./timescaledb.nix { };
+    timescaledb-apache = super.callPackage ./timescaledb.nix { enableUnfree = false; };
+
+    timescaledb_toolkit = super.callPackage ./timescaledb_toolkit.nix { };
+
+    tsearch_extras = super.callPackage ./tsearch_extras.nix { };
+
+    tds_fdw = super.callPackage ./tds_fdw.nix { };
+
+    pgrouting = super.callPackage ./pgrouting.nix { };
+
+    pg_partman = super.callPackage ./pg_partman.nix { };
+
+    pg_relusage = super.callPackage ./pg_relusage.nix { };
+
+    pg_safeupdate = super.callPackage ./pg_safeupdate.nix { };
+
+    pg_squeeze = super.callPackage ./pg_squeeze.nix { };
+
+    pg_uuidv7 = super.callPackage ./pg_uuidv7.nix { };
+
+    promscale_extension = super.callPackage ./promscale_extension.nix { };
+
+    repmgr = super.callPackage ./repmgr.nix { };
+
+    rum = super.callPackage ./rum.nix { };
+
+    tsja = super.callPackage ./tsja.nix { };
+
+    wal2json = super.callPackage ./wal2json.nix { };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/h3-pg.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/h3-pg.nix
new file mode 100644
index 000000000000..91437de34585
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/h3-pg.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, cmake
+, fetchFromGitHub
+, h3_4
+, postgresql
+, postgresqlTestHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "h3-pg";
+  version = "4.1.3";
+
+  src = fetchFromGitHub {
+    owner = "zachasme";
+    repo = "h3-pg";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-nkaDZ+JuMtsGUJVx70DD2coLrmc/T8/cNov7pfNF1Eg=";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "add_subdirectory(cmake/h3)" "include_directories(${lib.getDev h3_4}/include/h3)"
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace cmake/AddPostgreSQLExtension.cmake \
+      --replace "INTERPROCEDURAL_OPTIMIZATION TRUE" ""
+  '';
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    h3_4
+    postgresql
+  ];
+
+  installPhase = ''
+    install -D -t $out/lib h3/h3.so
+    install -D -t $out/share/postgresql/extension h3/h3-*.sql h3/h3.control
+    install -D -t $out/lib h3_postgis/h3_postgis.so
+    install -D -t $out/share/postgresql/extension h3_postgis/h3_postgis-*.sql h3_postgis/h3_postgis.control
+  '';
+
+  passthru.tests.extension = stdenv.mkDerivation {
+    name = "h3-pg-test";
+    dontUnpack = true;
+    doCheck = true;
+    buildInputs = [ postgresqlTestHook ];
+    nativeCheckInputs = [ (postgresql.withPackages (ps: [ ps.h3-pg ps.postgis ])) ];
+    postgresqlTestUserOptions = "LOGIN SUPERUSER";
+    passAsFile = [ "sql" ];
+    sql = ''
+      CREATE EXTENSION h3;
+      CREATE EXTENSION h3_postgis CASCADE;
+
+      SELECT h3_lat_lng_to_cell(POINT('37.3615593,-122.0553238'), 5);
+      SELECT ST_NPoints(h3_cell_to_boundary_geometry('8a63a9a99047fff'));
+    '';
+    failureHook = "postgresqlStop";
+    checkPhase = ''
+      runHook preCheck
+      psql -a -v ON_ERROR_STOP=1 -f $sqlPath
+      runHook postCheck
+    '';
+    installPhase = "touch $out";
+  };
+
+  meta = with lib; {
+    description = "PostgreSQL bindings for H3, a hierarchical hexagonal geospatial indexing system";
+    homepage = "https://github.com/zachasme/h3-pg";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ marsam ];
+    inherit (postgresql.meta) platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/hypopg.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/hypopg.nix
new file mode 100644
index 000000000000..62f2e9263e76
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/hypopg.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "hypopg";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "HypoPG";
+    repo = "hypopg";
+    rev = version;
+    hash = "sha256-YzQnkQi9BlDryUySnWHWeTanhgfVUXjHjOqj+nQucCY=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    install -D -t $out/lib *${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.control
+    install -D -t $out/share/postgresql/extension *.sql
+  '';
+
+  meta = with lib; {
+    description = "Hypothetical Indexes for PostgreSQL";
+    homepage = "https://hypopg.readthedocs.io";
+    license = licenses.postgresql;
+    platforms = postgresql.meta.platforms;
+    maintainers = with maintainers; [ bbigras ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/jsonb_deep_sum.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/jsonb_deep_sum.nix
new file mode 100644
index 000000000000..092212aa3de0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/jsonb_deep_sum.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "jsonb_deep_sum";
+  version = "unstable-2021-12-24";
+
+  src = fetchFromGitHub {
+    owner = "furstenheim";
+    repo = "jsonb_deep_sum";
+    rev = "d9c69aa6b7da860e5522a9426467e67cb787980c";
+    sha256 = "sha256-W1wNILAwTAjFPezq+grdRMA59KEnMZDz69n9xQUqdc0=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/postgresql/extension}
+
+    cp *${postgresql.dlSuffix} $out/lib
+    cp *.sql     $out/share/postgresql/extension
+    cp *.control $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "PostgreSQL extension to easily add jsonb numeric";
+    homepage = "https://github.com/furstenheim/jsonb_deep_sum";
+    maintainers = with maintainers; [ _1000101 ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/lantern.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/lantern.nix
new file mode 100644
index 000000000000..bd5f1098f8d6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/lantern.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, cmake
+, fetchFromGitHub
+, postgresql
+, postgresqlTestHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "lantern";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "lanterndata";
+    repo = "lantern";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-UP3txEBBJV/iOOBDVpRCrsoiAp6QEOHTomlLmbeTQdU=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    postgresql
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -t $out/lib lantern${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension lantern-*.sql
+    install -D -t $out/share/postgresql/extension lantern.control
+
+    runHook postInstall
+  '';
+
+  cmakeFlags = [
+    "-DBUILD_FOR_DISTRIBUTING=ON"
+  ];
+
+  passthru.tests.extension = stdenv.mkDerivation {
+    name = "lantern-pg-test";
+    dontUnpack = true;
+    doCheck = true;
+    buildInputs = [ postgresqlTestHook ];
+    nativeCheckInputs = [ (postgresql.withPackages (_: [ finalAttrs.finalPackage ])) ];
+    postgresqlTestUserOptions = "LOGIN SUPERUSER";
+    passAsFile = [ "sql" ];
+    sql = ''
+      CREATE EXTENSION lantern;
+
+      CREATE TABLE small_world (id integer, vector real[3]);
+      INSERT INTO small_world (id, vector) VALUES (0, '{0,0,0}'), (1, '{0,0,1}');
+
+      CREATE INDEX ON small_world USING hnsw (vector dist_l2sq_ops)
+      WITH (M=2, ef_construction=10, ef=4, dim=3);
+    '';
+    failureHook = "postgresqlStop";
+    checkPhase = ''
+      runHook preCheck
+      psql -a -v ON_ERROR_STOP=1 -f $sqlPath
+      runHook postCheck
+    '';
+    installPhase = "touch $out";
+  };
+
+  meta = with lib; {
+    description = "PostgreSQL vector database extension for building AI applications";
+    homepage = "https://lantern.dev/";
+    changelog = "https://github.com/lanterndata/lantern/blob/${finalAttrs.src.rev}/CHANGELOG.md";
+    license = licenses.bsl11;
+    maintainers = [ maintainers.marsam ];
+    platforms = postgresql.meta.platforms;
+    # error: use of undeclared identifier 'aligned_alloc'
+    broken = stdenv.isDarwin && lib.versionOlder stdenv.hostPlatform.darwinMinVersion "10.13";
+  };
+})
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/periods.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/periods.nix
new file mode 100644
index 000000000000..422d6ddaf2b3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/periods.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "periods";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "xocolatl";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ezt+MtDqPM8OmJCD6oQTS644l+XHZoxuivq0PUIXOY8=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    install -D -t $out/lib *${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  meta = with lib; {
+    description = "PostgreSQL extension implementing SQL standard functionality for PERIODs and SYSTEM VERSIONING";
+    homepage = "https://github.com/xocolatl/periods";
+    maintainers = with maintainers; [ ivan ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_auto_failover.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_auto_failover.nix
new file mode 100644
index 000000000000..7a1741b70490
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_auto_failover.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, postgresql, openssl, zlib, readline, libkrb5, libxcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_auto_failover";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "citusdata";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-OIWykfFbVskrkPG/zSmZtZjc+W956KSfIzK7f5QOqpI=";
+  };
+
+  buildInputs = postgresql.buildInputs ++ [ postgresql ];
+
+  installPhase = ''
+    install -D -t $out/bin src/bin/pg_autoctl/pg_autoctl
+    install -D -t $out/lib src/monitor/pgautofailover.so
+    install -D -t $out/share/postgresql/extension src/monitor/*.sql
+    install -D -t $out/share/postgresql/extension src/monitor/pgautofailover.control
+  '';
+
+  meta = with lib; {
+    description = "PostgreSQL extension and service for automated failover and high-availability";
+    mainProgram = "pg_autoctl";
+    homepage = "https://github.com/citusdata/pg_auto_failover";
+    changelog = "https://github.com/citusdata/pg_auto_failover/blob/v${version}/CHANGELOG.md";
+    maintainers = [ maintainers.marsam ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_bigm.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_bigm.nix
new file mode 100644
index 000000000000..dcd23a0949bb
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_bigm.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_bigm";
+  version = "1.2-20200228";
+
+  src = fetchFromGitHub {
+    owner = "pgbigm";
+    repo = "pg_bigm";
+    rev = "v${version}";
+    hash = "sha256-3lspEglVWzEUTiRIWqW0DpQe8gDn9R/RxsWuI9znYc8=";
+  };
+
+  patches = [
+    # Fix compatiblity with PostgreSQL 16. Remove with the next release.
+    (fetchpatch {
+      url = "https://github.com/pgbigm/pg_bigm/commit/2a9d783c52a1d7a2eb414da6f091f6035da76edf.patch";
+      hash = "sha256-LuMpSUPnT8cPChQfA9sJEKP4aGpsbN5crfTKLnDzMN8=";
+    })
+  ];
+
+  buildInputs = [ postgresql ];
+
+  makeFlags = [ "USE_PGXS=1" ];
+
+  installPhase = ''
+    install -D -t $out/lib pg_bigm${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  meta = with lib; {
+    description = "Text similarity measurement and index searching based on bigrams";
+    homepage = "https://pgbigm.osdn.jp/";
+    maintainers = [ maintainers.marsam ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_cron.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_cron.nix
new file mode 100644
index 000000000000..02c6e6435ae7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_cron.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_cron";
+  version = "1.6.2";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = pname;
+    rev    = "v${version}";
+    hash   = "sha256-/dD1gX0+RRsBFIjSV9TVk+ppPw0Jrzssl+rRZ2qAp4w=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/postgresql/extension}
+
+    cp *${postgresql.dlSuffix} $out/lib
+    cp *.sql     $out/share/postgresql/extension
+    cp *.control $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "Run Cron jobs through PostgreSQL";
+    homepage    = "https://github.com/citusdata/pg_cron";
+    changelog   = "https://github.com/citusdata/pg_cron/raw/v${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_ed25519.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_ed25519.nix
new file mode 100644
index 000000000000..010f8f819da9
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_ed25519.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitLab, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_ed25519";
+  version = "0.2";
+  src = fetchFromGitLab {
+    owner = "dwagin";
+    repo = "pg_ed25519";
+    rev = version;
+    sha256 = "16w3qx3wj81bzfhydl2pjhn8b1jak6h7ja9wq1kc626g0siggqi0";
+  };
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    mkdir -p $out/bin    # For buildEnv to setup proper symlinks. See #22653
+    mkdir -p $out/{lib,share/postgresql/extension}
+
+    cp *.so      $out/lib
+    cp *.sql     $out/share/postgresql/extension
+    cp *.control $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "PostgreSQL extension for signing and verifying ed25519 signatures";
+    homepage = "https://gitlab.com/dwagin/pg_ed25519";
+    maintainers = [ maintainers.renzo ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.mit;
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_embedding.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_embedding.nix
new file mode 100644
index 000000000000..e858d6f0c5d0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_embedding.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_embedding";
+  version = "0.3.6";
+
+  src = fetchFromGitHub {
+    owner = "neondatabase";
+    repo = pname;
+    rev = version;
+    hash = "sha256-NTBxsQB8mR7e/CWwkCEyDiYhi3Nxl/aKgRBwqc0THcI=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    install -D -t $out/lib *.so
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  meta = with lib; {
+    description = "PostgreSQL extension implementing the HNSW algorithm for vector similarity search";
+    homepage = "https://github.com/neondatabase/pg_embedding";
+    maintainers = with maintainers; [ ivan ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_hint_plan.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_hint_plan.nix
new file mode 100644
index 000000000000..afc5b9fe6506
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_hint_plan.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+let
+  source = {
+    "16" = {
+      version = "1.6.0";
+      hash = "sha256-lg7N0QblluTgtNo1tGZjirNJSyQXtcAEs9Jqd3zx0Sg=";
+    };
+    "15" = {
+      version = "1.5.1";
+      hash = "sha256-o8Hepf/Mc1ClRTLZ6PBdqU4jSdlz+ijVgl2vJKmIc6M=";
+    };
+    "14" = {
+      version = "1.4.2";
+      hash = "sha256-nGyKcNY57RdQdZKSaBPk2/YbT0Annz1ZevH0lKswdhA=";
+    };
+    "13" = {
+      version = "1.3.9";
+      hash = "sha256-KGcHDwk8CgNHPZARfLBfS8r7TRCP9LPjT+m4fNSnnW0=";
+    };
+    "12" = {
+      version = "1.3.9";
+      hash = "sha256-64/dlm6e4flCxMQ8efsxfKSlja+Tko0zsghTgLatN+Y=";
+    };
+  }.${lib.versions.major postgresql.version} or (throw "Source for pg_hint_plan is not available for ${postgresql.version}");
+in
+stdenv.mkDerivation {
+  pname = "pg_hint_plan";
+  inherit (source) version;
+
+  src = fetchFromGitHub {
+    owner = "ossc-db";
+    repo = "pg_hint_plan";
+    rev = "REL${lib.versions.major postgresql.version}_${builtins.replaceStrings ["."] ["_"] source.version}";
+    inherit (source) hash;
+  };
+
+  postPatch = lib.optionalString (lib.versionOlder postgresql.version "14") ''
+    # https://github.com/ossc-db/pg_hint_plan/commit/e9e564ad59b8bd4a03e0f13b95b5122712e573e6
+    substituteInPlace Makefile --replace "LDFLAGS+=-Wl,--build-id" ""
+  '';
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    install -D -t $out/lib pg_hint_plan${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  meta = with lib; {
+    description = "Extension to tweak PostgreSQL execution plans using so-called 'hints' in SQL comments";
+    homepage = "https://github.com/ossc-db/pg_hint_plan";
+    maintainers = with maintainers; [ _1000101 ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_hll.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_hll.nix
new file mode 100644
index 000000000000..a60601aef569
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_hll.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_hll";
+  version = "2.18";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "postgresql-hll";
+    rev    = "refs/tags/v${version}";
+    hash   = "sha256-Latdxph1Ura8yKEokEjalJ+/GY+pAKOT3GXjuLprj6c=";
+  };
+
+  installPhase = ''
+    install -D -t $out/lib hll${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+ '';
+
+  meta = with lib; {
+    description = "HyperLogLog for PostgreSQL";
+    homepage    = "https://github.com/citusdata/postgresql-hll";
+    changelog   = "https://github.com/citusdata/postgresql-hll/blob/v${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_ivm.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_ivm.nix
new file mode 100644
index 000000000000..46c01251d503
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_ivm.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_ivm";
+  version = "1.8";
+
+  src = fetchFromGitHub {
+    owner = "sraoss";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-HncWX3jx9sEvxGGMMZ9QT4tDQ4JYbkNrFw2aZHgCVE8=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    install -D -t $out/lib pg_ivm${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  meta = with lib; {
+    description = "Materialized views with IVM (Incremental View Maintenance) for PostgreSQL";
+    homepage = "https://github.com/sraoss/pg_ivm";
+    changelog = "https://github.com/sraoss/pg_ivm/releases/tag/v${version}";
+    maintainers = with maintainers; [ ivan ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.postgresql;
+    broken = versionOlder postgresql.version "13";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_net.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_net.nix
new file mode 100644
index 000000000000..a86f53eeef05
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_net.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, curl, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_net";
+  version = "0.8.0";
+
+  buildInputs = [ curl postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "supabase";
+    repo   = pname;
+    rev    = "refs/tags/v${version}";
+    hash   = "sha256-ZPsRPWV1G3lMM2mT+H139Wvgoy8QnmeUbzEnGeDJmZA=";
+  };
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/postgresql/extension}
+
+    cp *${postgresql.dlSuffix} $out/lib
+    cp sql/*.sql $out/share/postgresql/extension
+    cp *.control $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "Async networking for Postgres";
+    homepage    = "https://github.com/supabase/pg_net";
+    changelog   = "https://github.com/supabase/pg_net/releases/tag/v${version}";
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_partman.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_partman.nix
new file mode 100644
index 000000000000..10e899f810d0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_partman.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_partman";
+  version = "5.0.1";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "pgpartman";
+    repo   = pname;
+    rev    = "refs/tags/v${version}";
+    sha256 = "sha256-sJODpyRgqpeg/Lb584wNgCCFRaH22ELcbof1bA612aw=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/postgresql/extension}
+
+    cp src/*${postgresql.dlSuffix} $out/lib
+    cp updates/*     $out/share/postgresql/extension
+    cp -r sql/*      $out/share/postgresql/extension
+    cp *.control     $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "Partition management extension for PostgreSQL";
+    homepage    = "https://github.com/pgpartman/pg_partman";
+    changelog   = "https://github.com/pgpartman/pg_partman/blob/v${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ ggpeti ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.postgresql;
+    broken      = versionOlder postgresql.version "14";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_rational.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_rational.nix
new file mode 100644
index 000000000000..df80ea49a541
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_rational.nix
@@ -0,0 +1,39 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, postgresql
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pg_rational";
+  version = "0.0.2";
+
+  src = fetchFromGitHub {
+    owner  = "begriffs";
+    repo   = "pg_rational";
+    rev    = "v${version}";
+    sha256 = "sha256-Sp5wuX2nP3KGyWw7MFa11rI1CPIKIWBt8nvBSsASIEw=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{lib,share/postgresql/extension}
+
+    cp *${postgresql.dlSuffix} $out/lib
+    cp *.sql     $out/share/postgresql/extension
+    cp *.control $out/share/postgresql/extension
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Precise fractional arithmetic for PostgreSQL";
+    homepage    = "https://github.com/begriffs/pg_rational";
+    maintainers = with maintainers; [ netcrns ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_relusage.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_relusage.nix
new file mode 100644
index 000000000000..1fe9fd3cac87
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_relusage.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_relusage";
+  version = "0.0.1";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "adept";
+    repo   = pname;
+    rev    = "refs/tags/${version}";
+    sha256 = "8hJNjQ9MaBk3J9a73l+yQMwMW/F2N8vr5PO2o+5GvYs=";
+  };
+
+  installPhase = ''
+    install -D -t $out/lib *${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  meta = with lib; {
+    description = "pg_relusage extension for PostgreSQL: discover and log the relations used in your statements";
+    homepage    = "https://github.com/adept/pg_relusage";
+    maintainers = with maintainers; [ thenonameguy ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_repack.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_repack.nix
new file mode 100644
index 000000000000..c265ae39ca46
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_repack.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+, postgresql
+, postgresqlTestHook
+, readline
+, testers
+, zlib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pg_repack";
+  version = "1.5.0";
+
+  buildInputs = postgresql.buildInputs ++ [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner = "reorg";
+    repo = "pg_repack";
+    rev = "ver_${finalAttrs.version}";
+    sha256 = "sha256-do80phyMxwcRIkYyUt9z02z7byNQhK+pbSaCUmzG+4c=";
+  };
+
+  installPhase = ''
+    install -D bin/pg_repack -t $out/bin/
+    install -D lib/pg_repack${postgresql.dlSuffix} -t $out/lib/
+    install -D lib/{pg_repack--${finalAttrs.version}.sql,pg_repack.control} -t $out/share/postgresql/extension
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+    };
+    extension = stdenv.mkDerivation {
+      name = "plpgsql-check-test";
+      dontUnpack = true;
+      doCheck = true;
+      buildInputs = [ postgresqlTestHook ];
+      nativeCheckInputs = [ (postgresql.withPackages (ps: [ ps.pg_repack ])) ];
+      postgresqlTestUserOptions = "LOGIN SUPERUSER";
+      failureHook = "postgresqlStop";
+      checkPhase = ''
+        runHook preCheck
+        psql -a -v ON_ERROR_STOP=1 -c "CREATE EXTENSION pg_repack;"
+        runHook postCheck
+      '';
+      installPhase = "touch $out";
+    };
+  };
+
+  meta = with lib; {
+    description = "Reorganize tables in PostgreSQL databases with minimal locks";
+    longDescription = ''
+      pg_repack is a PostgreSQL extension which lets you remove bloat from tables and indexes, and optionally restore
+      the physical order of clustered indexes. Unlike CLUSTER and VACUUM FULL it works online, without holding an
+      exclusive lock on the processed tables during processing. pg_repack is efficient to boot,
+      with performance comparable to using CLUSTER directly.
+    '';
+    homepage = "https://github.com/reorg/pg_repack";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ danbst ];
+    inherit (postgresql.meta) platforms;
+    mainProgram = "pg_repack";
+  };
+})
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_safeupdate.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_safeupdate.nix
new file mode 100644
index 000000000000..4c601896b45b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_safeupdate.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg-safeupdate";
+  version = "1.5";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "eradman";
+    repo   = pname;
+    rev    = version;
+    sha256 = "sha256-RRSpkWLFuif+6RCncnsb1NnjKnIIRY9KgebKkjCN5cs=";
+  };
+
+  installPhase = ''
+    install -D safeupdate${postgresql.dlSuffix} -t $out/lib
+  '';
+
+  meta = with lib; {
+    description = "A simple extension to PostgreSQL that requires criteria for UPDATE and DELETE";
+    homepage    = "https://github.com/eradman/pg-safeupdate";
+    changelog   = "https://github.com/eradman/pg-safeupdate/raw/${src.rev}/NEWS";
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.postgresql;
+    broken      = versionOlder postgresql.version "14";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_similarity.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_similarity.nix
new file mode 100644
index 000000000000..227ea8357861
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_similarity.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, fetchFromGitHub, gcc, postgresql }:
+
+stdenv.mkDerivation {
+
+  pname = "pg_similarity";
+  version = "1.0";
+  src = fetchFromGitHub {
+    owner = "eulerto";
+    repo = "pg_similarity";
+    rev = "be1a8b08c8716e59b89982557da9ea68cdf868c5";
+    sha256 = "1z4v4r2yccdr8kz3935fnk1bc5vj0qj0apscldyap4wxlyi89xim";
+  };
+
+  buildInputs = [ postgresql gcc ];
+  buildPhase = "USE_PGXS=1 make";
+  installPhase = ''
+    install -D pg_similarity${postgresql.dlSuffix} -t $out/lib/
+    install -D ./{pg_similarity--unpackaged--1.0.sql,pg_similarity--1.0.sql,pg_similarity.control} -t $out/share/postgresql/extension
+  '';
+
+  meta = {
+    description = "An extension to support similarity queries on PostgreSQL";
+    longDescription = ''
+       pg_similarity is an extension to support similarity queries on PostgreSQL. The implementation
+       is tightly integrated in the RDBMS in the sense that it defines operators so instead of the traditional
+       operators (= and <>) you can use ~~~ and ~!~ (any of these operators represents a similarity function).
+    '';
+    platforms = postgresql.meta.platforms;
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ danbst ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_squeeze.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_squeeze.nix
new file mode 100644
index 000000000000..c9f32f634888
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_squeeze.nix
@@ -0,0 +1,67 @@
+{ lib, stdenv, fetchFromGitHub, postgresql, postgresqlTestHook }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pg_squeeze";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "cybertec-postgresql";
+    repo = "pg_squeeze";
+    rev = "REL${builtins.replaceStrings ["."] ["_"] finalAttrs.version}";
+    hash = "sha256-YS13iIpQ4NJe0N6bRVa2RDxEMwEzBc2mjNYM5/Vqjn8=";
+  };
+
+  buildInputs = [
+    postgresql
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -t $out/lib pg_squeeze${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension pg_squeeze-*.sql
+    install -D -t $out/share/postgresql/extension pg_squeeze.control
+
+    runHook postInstall
+  '';
+
+  passthru.tests.extension = stdenv.mkDerivation {
+    name = "pg_squeeze-test";
+    dontUnpack = true;
+    doCheck = true;
+    nativeCheckInputs = [ postgresqlTestHook (postgresql.withPackages (_: [ finalAttrs.finalPackage ])) ];
+    failureHook = "postgresqlStop";
+    postgresqlTestUserOptions = "LOGIN SUPERUSER";
+    postgresqlExtraSettings = ''
+      wal_level = logical
+      shared_preload_libraries = 'pg_squeeze'
+    '';
+    passAsFile = [ "sql" ];
+    sql = ''
+      CREATE EXTENSION pg_squeeze;
+
+      SELECT squeeze.start_worker();
+
+      CREATE TABLE a(i int PRIMARY KEY, j int);
+      INSERT INTO a(i, j) SELECT x, x FROM generate_series(1, 20) AS g(x);
+      INSERT INTO squeeze.tables (tabschema, tabname, schedule)
+      VALUES ('public', 'a', ('{30}', '{22}', NULL, NULL, '{3, 5}'));
+      SELECT squeeze.squeeze_table('public', 'a', NULL, NULL, NULL);
+    '';
+    checkPhase = ''
+      runHook preCheck
+      psql -a -v ON_ERROR_STOP=1 -f $sqlPath
+      runHook postCheck
+    '';
+    installPhase = "touch $out";
+  };
+
+  meta = with lib; {
+    description = "A PostgreSQL extension for automatic bloat cleanup";
+    homepage = "https://github.com/cybertec-postgresql/pg_squeeze";
+    changelog = "https://github.com/cybertec-postgresql/pg_squeeze/blob/${finalAttrs.src.rev}/NEWS";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+    platforms = postgresql.meta.platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_topn.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_topn.nix
new file mode 100644
index 000000000000..2a11417c9083
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_topn.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_topn";
+  version = "2.6.0";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "postgresql-topn";
+    rev    = "refs/tags/v${version}";
+    sha256 = "sha256-kq3P+a9NWLKN/CsISGHfInbeL4ex4KIeDhTKyyN7FVE=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/postgresql/extension}
+
+    cp *${postgresql.dlSuffix} $out/lib
+    cp *.sql     $out/share/postgresql/extension
+    cp *.control $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "Efficient querying of 'top values' for PostgreSQL";
+    homepage    = "https://github.com/citusdata/postgresql-topn";
+    changelog   = "https://github.com/citusdata/postgresql-topn/raw/v${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.agpl3Only;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_uuidv7.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_uuidv7.nix
new file mode 100644
index 000000000000..9bbde3b195da
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pg_uuidv7.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, postgresql
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pg_uuidv7";
+  version = "1.5.0";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner = "fboulnois";
+    repo = "pg_uuidv7";
+    rev = "v${version}";
+    hash = "sha256-oVyRtjl3KsD3j96qvQb8bFLMhoWO81OudOL4wVXrjzI=";
+  };
+
+  installPhase = ''
+      install -D -t $out/lib pg_uuidv7${postgresql.dlSuffix}
+      install -D {sql/pg_uuidv7--${lib.versions.majorMinor version}.sql,pg_uuidv7.control} -t $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "A tiny Postgres extension to create version 7 UUIDs";
+    homepage = "https://github.com/fboulnois/pg_uuidv7";
+    changelog = "https://github.com/fboulnois/pg_uuidv7/blob/main/CHANGELOG.md";
+    maintainers = with maintainers; [ gaelreyrol ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.mpl20;
+    broken = versionOlder postgresql.version "13";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgaudit.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgaudit.nix
new file mode 100644
index 000000000000..f4c03d611f50
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgaudit.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchFromGitHub, libkrb5, openssl, postgresql }:
+
+let
+  source = {
+    "16" = {
+      version = "16.0";
+      hash = "sha256-8+tGOl1U5y9Zgu+9O5UDDE4bec4B0JC/BQ6GLhHzQzc=";
+    };
+    "15" = {
+      version = "1.7.0";
+      hash = "sha256-8pShPr4HJaJQPjW1iPJIpj3CutTx8Tgr+rOqoXtgCcw=";
+    };
+    "14" = {
+      version = "1.6.2";
+      hash = "sha256-Bl7Jk2B0deZUDiI391vk4nilwuVGHd1wuaQRSCoA3Mk=";
+    };
+    "13" = {
+      version = "1.5.2";
+      hash = "sha256-fyf2Ym0fAAXjc28iFCGDEftPAyDLXmEgi/0DaTJJiIg=";
+    };
+    "12" = {
+      version = "1.4.3";
+      hash = "sha256-c8/xUFIHalu2bMCs57DeylK0oW0VnQwmUCpdp+tYqk4=";
+    };
+  }.${lib.versions.major postgresql.version} or (throw "Source for pgaudit is not available for ${postgresql.version}");
+in
+stdenv.mkDerivation {
+  pname = "pgaudit";
+  inherit (source) version;
+
+  src = fetchFromGitHub {
+    owner = "pgaudit";
+    repo = "pgaudit";
+    rev = source.version;
+    hash = source.hash;
+  };
+
+  buildInputs = [ libkrb5 openssl postgresql ];
+
+  makeFlags = [ "USE_PGXS=1" ];
+
+  installPhase = ''
+    install -D -t $out/lib pgaudit${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  meta = with lib; {
+    description = "Open Source PostgreSQL Audit Logging";
+    homepage = "https://github.com/pgaudit/pgaudit";
+    changelog = "https://github.com/pgaudit/pgaudit/releases/tag/${source.version}";
+    maintainers = with maintainers; [ idontgetoutmuch ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgjwt.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgjwt.nix
new file mode 100644
index 000000000000..2b6ee2edaf85
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgjwt.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, postgresql, unstableGitUpdater }:
+
+stdenv.mkDerivation {
+  pname = "pgjwt";
+  version = "unstable-2023-03-02";
+
+  src = fetchFromGitHub {
+    owner  = "michelp";
+    repo   = "pgjwt";
+    rev    = "f3d82fd30151e754e19ce5d6a06c71c20689ce3d";
+    sha256 = "sha256-nDZEDf5+sFc1HDcG2eBNQj+kGcdAYRXJseKi9oww+JU=";
+  };
+
+  dontBuild = true;
+  installPhase = ''
+    mkdir -p $out/share/postgresql/extension
+    cp pg*sql *.control $out/share/postgresql/extension
+  '';
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    description = "PostgreSQL implementation of JSON Web Tokens";
+    longDescription = ''
+      sign() and verify() functions to create and verify JSON Web Tokens.
+    '';
+    license = licenses.mit;
+    platforms = postgresql.meta.platforms;
+    maintainers = with maintainers; [spinus];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgroonga.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgroonga.nix
new file mode 100644
index 000000000000..28303612fef3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgroonga.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, pkg-config, postgresql, msgpack-c, groonga }:
+
+stdenv.mkDerivation rec {
+  pname = "pgroonga";
+  version = "3.1.8";
+
+  src = fetchurl {
+    url = "https://packages.groonga.org/source/${pname}/${pname}-${version}.tar.gz";
+    hash = "sha256-Wjh0NJK6IfcI30R7HKCsB87/lxXZYEqiMD9t2nldCW4=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ postgresql msgpack-c groonga ];
+
+  makeFlags = [
+    "HAVE_MSGPACK=1"
+    "MSGPACK_PACKAGE_NAME=msgpack-c"
+  ];
+
+  installPhase = ''
+    install -D pgroonga${postgresql.dlSuffix} -t $out/lib/
+    install -D pgroonga.control -t $out/share/postgresql/extension
+    install -D data/pgroonga-*.sql -t $out/share/postgresql/extension
+
+    install -D pgroonga_database${postgresql.dlSuffix} -t $out/lib/
+    install -D pgroonga_database.control -t $out/share/postgresql/extension
+    install -D data/pgroonga_database-*.sql -t $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "A PostgreSQL extension to use Groonga as the index";
+    longDescription = ''
+      PGroonga is a PostgreSQL extension to use Groonga as the index.
+      PostgreSQL supports full text search against languages that use only alphabet and digit.
+      It means that PostgreSQL doesn't support full text search against Japanese, Chinese and so on.
+      You can use super fast full text search feature against all languages by installing PGroonga into your PostgreSQL.
+    '';
+    homepage = "https://pgroonga.github.io/";
+    changelog = "https://github.com/pgroonga/pgroonga/releases/tag/${version}";
+    license = licenses.postgresql;
+    platforms = postgresql.meta.platforms;
+    maintainers = with maintainers; [ DerTim1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgrouting.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgrouting.nix
new file mode 100644
index 000000000000..323f8a4ec090
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgrouting.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, postgresql, perl, cmake, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "pgrouting";
+  version = "3.6.1";
+
+  nativeBuildInputs = [ cmake perl ];
+  buildInputs = [ postgresql boost ];
+
+  src = fetchFromGitHub {
+    owner  = "pgRouting";
+    repo   = pname;
+    rev    = "v${version}";
+    hash   = "sha256-DyrBVGBLUkg0ODuHV3mCkyod2/hEtpZfLSvnrEQObaI=";
+  };
+
+  installPhase = ''
+    install -D lib/*.so                        -t $out/lib
+    install -D sql/pgrouting--${version}.sql   -t $out/share/postgresql/extension
+    install -D sql/common/pgrouting.control    -t $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "A PostgreSQL/PostGIS extension that provides geospatial routing functionality";
+    homepage    = "https://pgrouting.org/";
+    changelog   = "https://github.com/pgRouting/pgrouting/releases/tag/v${version}";
+    maintainers = with maintainers; teams.geospatial.members ++ [ steve-chavez ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgsodium.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgsodium.nix
new file mode 100644
index 000000000000..4057fd78fee8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgsodium.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libsodium
+, postgresql
+, postgresqlTestHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pgsodium";
+  version = "3.1.9";
+
+  src = fetchFromGitHub {
+    owner = "michelp";
+    repo = "pgsodium";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-Y8xL3PxF1GQV1JIgolMI1e8oGcUvWAgrPv84om7wKP8=";
+  };
+
+  buildInputs = [
+    libsodium
+    postgresql
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -t $out/lib pgsodium${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension sql/pgsodium-*.sql
+    install -D -t $out/share/postgresql/extension pgsodium.control
+
+    install -D -t $out/share/pgsodium/getkey_scripts getkey_scripts/*
+    ln -s $out/share/pgsodium/getkey_scripts/pgsodium_getkey_urandom.sh $out/share/postgresql/extension/pgsodium_getkey
+
+    runHook postInstall
+  '';
+
+  passthru.tests.extension = stdenv.mkDerivation {
+    name = "pgsodium-test";
+    dontUnpack = true;
+    doCheck = true;
+    nativeCheckInputs = [ postgresqlTestHook (postgresql.withPackages (_: [ finalAttrs.finalPackage ])) ];
+    failureHook = "postgresqlStop";
+    postgresqlTestUserOptions = "LOGIN SUPERUSER";
+    postgresqlExtraSettings = ''
+      shared_preload_libraries=pgsodium
+    '';
+    passAsFile = [ "sql" ];
+    sql = ''
+      CREATE EXTENSION pgsodium;
+
+      SELECT pgsodium.version();
+      SELECT pgsodium.crypto_auth_keygen();
+      SELECT pgsodium.randombytes_random() FROM generate_series(0, 5);
+      SELECT * FROM pgsodium.crypto_box_new_keypair();
+    '';
+    checkPhase = ''
+      runHook preCheck
+      psql -a -v ON_ERROR_STOP=1 -f $sqlPath
+      runHook postCheck
+    '';
+    installPhase = "touch $out";
+  };
+
+  meta = with lib; {
+    description = "Modern cryptography for PostgreSQL using libsodium";
+    homepage = "https://github.com/michelp/pgsodium";
+    changelog = "https://github.com/michelp/pgsodium/releases/tag/v${finalAttrs.version}";
+    license = licenses.postgresql;
+    maintainers = [ maintainers.marsam ];
+    platforms = postgresql.meta.platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgsql-http.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgsql-http.nix
new file mode 100644
index 000000000000..f2fc5a329f87
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgsql-http.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, curl, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pgsql-http";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "pramsey";
+    repo = "pgsql-http";
+    rev = "v${version}";
+    hash = "sha256-CPHfx7vhWfxkXsoKTzyFuTt47BPMvzi/pi1leGcuD60=";
+  };
+
+  buildInputs = [ curl postgresql ];
+
+  installPhase = ''
+    install -D -t $out/lib *${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  meta = with lib; {
+    description = "HTTP client for PostgreSQL, retrieve a web page from inside the database";
+    homepage = "https://github.com/pramsey/pgsql-http";
+    changelog = "https://github.com/pramsey/pgsql-http/releases/tag/v${version}";
+    maintainers = [ maintainers.marsam ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgtap.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgtap.nix
new file mode 100644
index 000000000000..f1514e1ae8d3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgtap.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, perl
+, perlPackages
+, postgresql
+, postgresqlTestHook
+, which
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pgtap";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "theory";
+    repo = "pgtap";
+    rev = "v${finalAttrs.version}";
+    sha256 = "sha256-jPfYp94mZenKctCW+3tyyvdgVKW6TDsG1/dbBlHK3vE=";
+  };
+
+  nativeBuildInputs = [ postgresql perl perlPackages.TAPParserSourceHandlerpgTAP which ];
+
+  installPhase = ''
+    install -D {sql/pgtap--${finalAttrs.version}.sql,pgtap.control} -t $out/share/postgresql/extension
+  '';
+
+  passthru.tests.extension = stdenv.mkDerivation {
+    name = "pgtap-test";
+    dontUnpack = true;
+    doCheck = true;
+    nativeCheckInputs = [ postgresqlTestHook (postgresql.withPackages (_: [ finalAttrs.finalPackage ])) ];
+    passAsFile = [ "sql" ];
+    sql = ''
+      CREATE EXTENSION pgtap;
+
+      BEGIN;
+      SELECT plan(1);
+      SELECT pass('Test passed');
+      SELECT * FROM finish();
+      ROLLBACK;
+    '';
+    failureHook = "postgresqlStop";
+    checkPhase = ''
+      runHook preCheck
+      psql -a -v ON_ERROR_STOP=1 -f $sqlPath
+      runHook postCheck
+    '';
+    installPhase = "touch $out";
+  };
+
+  meta = with lib; {
+    description = "A unit testing framework for PostgreSQL";
+    longDescription = ''
+      pgTAP is a unit testing framework for PostgreSQL written in PL/pgSQL and PL/SQL.
+      It includes a comprehensive collection of TAP-emitting assertion functions,
+      as well as the ability to integrate with other TAP-emitting test frameworks.
+      It can also be used in the xUnit testing style.
+    '';
+    maintainers = with maintainers; [ willibutz ];
+    homepage = "https://pgtap.org";
+    inherit (postgresql.meta) platforms;
+    license = licenses.mit;
+  };
+})
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/0001-read-clang-flags-from-environment.diff b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/0001-read-clang-flags-from-environment.diff
new file mode 100644
index 000000000000..2b145445cf15
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/0001-read-clang-flags-from-environment.diff
@@ -0,0 +1,19 @@
+diff --git a/crates/c/build.rs b/crates/c/build.rs
+index 8d822e5..8b7e371 100644
+--- a/crates/c/build.rs
++++ b/crates/c/build.rs
+@@ -1,9 +1,13 @@
+ fn main() {
+     println!("cargo:rerun-if-changed=src/c.h");
+     println!("cargo:rerun-if-changed=src/c.c");
++    println!("cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS");
+     cc::Build::new()
+-        .compiler("clang-16")
++        .compiler("@clang@")
+         .file("./src/c.c")
++        // read env var set by rustPlatform.bindgenHook
++        .try_flags_from_environment("BINDGEN_EXTRA_CLANG_ARGS")
++        .expect("the BINDGEN_EXTRA_CLANG_ARGS environment variable must be specified and UTF-8")
+         .opt_level(3)
+         .debug(true)
+         .compile("pgvectorsc");
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/Cargo.lock b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/Cargo.lock
new file mode 100644
index 000000000000..a52b9787460e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/Cargo.lock
@@ -0,0 +1,3626 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anyhow"
+version = "1.0.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9d19de80eff169429ac1e9f48fffb163916b448a44e8e046186232046d9e1f9"
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
+[[package]]
+name = "assert-json-diff"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 2.5.3",
+ "futures-core",
+]
+
+[[package]]
+name = "async-channel"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 4.0.1",
+ "event-listener-strategy",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c"
+dependencies = [
+ "async-lock 3.2.0",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 2.0.1",
+ "futures-lite 2.1.0",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c"
+dependencies = [
+ "async-channel 2.1.1",
+ "async-executor",
+ "async-io 2.2.2",
+ "async-lock 3.2.0",
+ "blocking",
+ "futures-lite 2.1.0",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock 2.8.0",
+ "autocfg",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-lite 1.13.0",
+ "log",
+ "parking",
+ "polling 2.8.0",
+ "rustix 0.37.27",
+ "slab",
+ "socket2 0.4.10",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-io"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7"
+dependencies = [
+ "async-lock 3.2.0",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-io",
+ "futures-lite 2.1.0",
+ "parking",
+ "polling 3.3.1",
+ "rustix 0.38.28",
+ "slab",
+ "tracing",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener 2.5.3",
+]
+
+[[package]]
+name = "async-lock"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c"
+dependencies = [
+ "event-listener 4.0.1",
+ "event-listener-strategy",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-object-pool"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aeb901c30ebc2fc4ab46395bbfbdba9542c16559d853645d75190c3056caf3bc"
+dependencies = [
+ "async-std",
+]
+
+[[package]]
+name = "async-process"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
+dependencies = [
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "async-signal",
+ "blocking",
+ "cfg-if",
+ "event-listener 3.1.0",
+ "futures-lite 1.13.0",
+ "rustix 0.38.28",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-signal"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5"
+dependencies = [
+ "async-io 2.2.2",
+ "async-lock 2.8.0",
+ "atomic-waker",
+ "cfg-if",
+ "futures-core",
+ "futures-io",
+ "rustix 0.38.28",
+ "signal-hook-registry",
+ "slab",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel 1.9.0",
+ "async-global-executor",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "async-process",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite 1.13.0",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d90cd0b264dfdd8eb5bad0a2c217c1f88fa96a8573f40e7b12de23fb468f46"
+
+[[package]]
+name = "async-trait"
+version = "0.1.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdf6721fb0140e4f897002dd086c06f6c27775df19cfe1fccb21181a48fd2c98"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "atomic-polyfill"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4"
+dependencies = [
+ "critical-section",
+]
+
+[[package]]
+name = "atomic-traits"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b29ec3788e96fb4fdb275ccb9d62811f2fa903d76c5eb4dd6fe7d09a7ed5871f"
+dependencies = [
+ "cfg-if",
+ "rustc_version 0.3.3",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "basic-cookies"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb53b6b315f924c7f113b162e53b3901c05fc9966baf84d201dfcc7432a4bb38"
+dependencies = [
+ "lalrpop",
+ "lalrpop-util",
+ "regex",
+]
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.68.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078"
+dependencies = [
+ "bitflags 2.4.1",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118"
+dependencies = [
+ "async-channel 2.1.1",
+ "async-lock 3.2.0",
+ "async-task",
+ "fastrand 2.0.1",
+ "futures-io",
+ "futures-lite 2.1.0",
+ "piper",
+ "tracing",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "c"
+version = "0.0.0"
+dependencies = [
+ "cc",
+ "detect",
+ "half 2.3.1",
+ "rand",
+]
+
+[[package]]
+name = "cargo_toml"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3f9629bc6c4388ea699781dc988c2b99766d7679b151c81990b4fa1208fafd3"
+dependencies = [
+ "serde",
+ "toml",
+]
+
+[[package]]
+name = "castaway"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcfab8ba68f3668e89f6ff60f5b205cea56aa7b769451a59f34b8682f51c056d"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap-cargo"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25122ca6ebad5f53578c26638afd9f0160426969970dc37ec6c363ff6b082ebd"
+dependencies = [
+ "clap",
+ "doc-comment",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9"
+dependencies = [
+ "anstyle",
+ "clap_lex",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "critical-section"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216"
+
+[[package]]
+name = "crossbeam"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6eb9105919ca8e40d437fc9cbb8f1975d916f1bd28afe795a48aae32a2cc8920"
+dependencies = [
+ "cfg-if",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e3681d554572a651dda4186cd47240627c3d0114d45a95f6ad27f2f22e7548d"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adc6598521bb5a83d491e8c1fe51db7296019d2ca3cb93cc6c2a20369a4d78a2"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "ctor"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e"
+dependencies = [
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "cty"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+
+[[package]]
+name = "curl"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2 0.4.10",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.70+curl-8.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c0333d8849afe78a4c8102a429a446bfdd055832af071945520e835ae2d841e"
+dependencies = [
+ "cc",
+ "libc",
+ "libnghttp2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "detect"
+version = "0.0.0"
+dependencies = [
+ "ctor",
+ "rustix 0.38.28",
+ "std_detect",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "downcast"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1"
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "ena"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum-map"
+version = "2.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9"
+dependencies = [
+ "enum-map-derive",
+]
+
+[[package]]
+name = "enum-map-derive"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "event-listener"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84f2cdcf274580f2d63697192d744727b3198894b1bf02923643bf59e2c26712"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener-strategy"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3"
+dependencies = [
+ "event-listener 4.0.1",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "eyre"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799"
+dependencies = [
+ "indenter",
+ "once_cell",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "finl_unicode"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fragile"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa"
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-lite"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143"
+dependencies = [
+ "fastrand 2.0.1",
+ "futures-core",
+ "futures-io",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+ "futures-core",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "half"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872"
+dependencies = [
+ "bytemuck",
+ "cfg-if",
+ "crunchy",
+ "num-traits",
+ "rand",
+ "rand_distr",
+ "serde",
+]
+
+[[package]]
+name = "hash32"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[package]]
+name = "heapless"
+version = "0.7.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f"
+dependencies = [
+ "atomic-polyfill",
+ "hash32",
+ "rustc_version 0.4.0",
+ "spin",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "http"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "httpmock"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b02e044d3b4c2f94936fb05f9649efa658ca788f44eb6b87554e2033fc8ce93"
+dependencies = [
+ "assert-json-diff",
+ "async-object-pool",
+ "async-trait",
+ "base64",
+ "basic-cookies",
+ "crossbeam-utils",
+ "form_urlencoded",
+ "futures-util",
+ "hyper",
+ "isahc",
+ "lazy_static",
+ "levenshtein",
+ "log",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_regex",
+ "similar",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.5.5",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "if_chain"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed"
+
+[[package]]
+name = "indenter"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455"
+dependencies = [
+ "hermit-abi",
+ "rustix 0.38.28",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "isahc"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9"
+dependencies = [
+ "async-channel 1.9.0",
+ "castaway",
+ "crossbeam-utils",
+ "curl",
+ "curl-sys",
+ "encoding_rs",
+ "event-listener 2.5.3",
+ "futures-lite 1.13.0",
+ "http",
+ "log",
+ "mime",
+ "once_cell",
+ "polling 2.8.0",
+ "slab",
+ "sluice",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "waker-fn",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
+
+[[package]]
+name = "js-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lalrpop"
+version = "0.19.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a1cbf952127589f2851ab2046af368fd20645491bb4b376f04b7f94d7a9837b"
+dependencies = [
+ "ascii-canvas",
+ "bit-set",
+ "diff",
+ "ena",
+ "is-terminal",
+ "itertools 0.10.5",
+ "lalrpop-util",
+ "petgraph",
+ "regex",
+ "regex-syntax 0.6.29",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.19.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3c48237b9604c5a4702de6b824e02006c3214327564636aef27c1028a8fa0ed"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "levenshtein"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
+
+[[package]]
+name = "libc"
+version = "0.2.151"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libm"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libnghttp2-sys"
+version = "0.1.8+1.55.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fae956c192dadcdb5dace96db71fa0b827333cce7c7b38dc71446f024d8a340"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "libredox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "redox_syscall",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+dependencies = [
+ "value-bag",
+]
+
+[[package]]
+name = "md-5"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if",
+ "digest",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "memmap2"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45fd3a57831bf88bc63f8cebc0cf956116276e97fef3966103e96416209f7c92"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "mockall"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43766c2b5203b10de348ffe19f7e54564b64f3d6018ff7648d1e2d6d3a0f0a48"
+dependencies = [
+ "cfg-if",
+ "downcast",
+ "fragile",
+ "lazy_static",
+ "mockall_derive",
+ "predicates",
+ "predicates-tree",
+]
+
+[[package]]
+name = "mockall_derive"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cbce79ec385a1d4f54baa90a76401eb15d9cab93685f62e7e9f942aa00ae2"
+dependencies = [
+ "cfg-if",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "multiversion"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2c7b9d7fe61760ce5ea19532ead98541f6b4c495d87247aff9826445cf6872a"
+dependencies = [
+ "multiversion-macros",
+ "target-features",
+]
+
+[[package]]
+name = "multiversion-macros"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26a83d8500ed06d68877e9de1dde76c1dbb83885dcdbda4ef44ccbc3fbda2ac8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "target-features",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "openai_api_rust"
+version = "0.1.8"
+source = "git+https://github.com/tensorchord/openai-api.git?rev=228d54b6002e98257b3c81501a054942342f585f#228d54b6002e98257b3c81501a054942342f585f"
+dependencies = [
+ "log",
+ "mime",
+ "rand",
+ "serde",
+ "serde_json",
+ "ureq",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.98"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "parking"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "pathsearch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da983bc5e582ab17179c190b4b66c7d76c5943a69c6d34df2a2b6bf8a2977b05"
+dependencies = [
+ "anyhow",
+ "libc",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pest"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "pgrx"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb44171122605250e719ca2ae49afb357bdb2fce4b3c876fcf2225165237328a"
+dependencies = [
+ "atomic-traits",
+ "bitflags 2.4.1",
+ "bitvec",
+ "enum-map",
+ "heapless",
+ "libc",
+ "once_cell",
+ "pgrx-macros",
+ "pgrx-pg-sys",
+ "pgrx-sql-entity-graph",
+ "seahash",
+ "seq-macro",
+ "serde",
+ "serde_cbor",
+ "serde_json",
+ "thiserror",
+ "uuid",
+]
+
+[[package]]
+name = "pgrx-macros"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18ac8628b7de2f29a93d0abdbdcaee95a0e0ef4b59fd4de99cc117e166e843b"
+dependencies = [
+ "pgrx-sql-entity-graph",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pgrx-pg-config"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acd45ac6eb1142c5690df63c4e0bdfb74f27c9f93a7af84f064dc2c0a2c2d6f7"
+dependencies = [
+ "cargo_toml",
+ "dirs",
+ "eyre",
+ "owo-colors",
+ "pathsearch",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "toml",
+ "url",
+]
+
+[[package]]
+name = "pgrx-pg-sys"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81c6207939582934fc26fceb651cb5338e363c06ddc6b2d50ca71867f7c70ffe"
+dependencies = [
+ "bindgen",
+ "clang-sys",
+ "eyre",
+ "libc",
+ "memoffset",
+ "once_cell",
+ "pgrx-macros",
+ "pgrx-pg-config",
+ "pgrx-sql-entity-graph",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "shlex",
+ "sptr",
+ "syn 1.0.109",
+ "walkdir",
+]
+
+[[package]]
+name = "pgrx-sql-entity-graph"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a50083de83b1fac2484e8f2c2a7da5fed0193904e2578fa6c4ce02262c455c2b"
+dependencies = [
+ "convert_case",
+ "eyre",
+ "petgraph",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "unescape",
+]
+
+[[package]]
+name = "pgrx-tests"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ba0115cd80d9e3ca1d5d2a8ab8b7320d6ed614a53d025b86152696a8b3caa75"
+dependencies = [
+ "clap-cargo",
+ "eyre",
+ "libc",
+ "once_cell",
+ "owo-colors",
+ "pgrx",
+ "pgrx-macros",
+ "pgrx-pg-config",
+ "postgres",
+ "proptest",
+ "rand",
+ "regex",
+ "serde",
+ "serde_json",
+ "sysinfo",
+ "thiserror",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "piper"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+dependencies = [
+ "atomic-waker",
+ "fastrand 2.0.1",
+ "futures-io",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a"
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "polling"
+version = "3.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf63fa624ab313c11656b4cda960bfc46c410187ad493c41f6ba2d8c1e991c9e"
+dependencies = [
+ "cfg-if",
+ "concurrent-queue",
+ "pin-project-lite",
+ "rustix 0.38.28",
+ "tracing",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "postgres"
+version = "0.19.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7915b33ed60abc46040cbcaa25ffa1c7ec240668e0477c4f3070786f5916d451"
+dependencies = [
+ "bytes",
+ "fallible-iterator",
+ "futures-util",
+ "log",
+ "tokio",
+ "tokio-postgres",
+]
+
+[[package]]
+name = "postgres-protocol"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520"
+dependencies = [
+ "base64",
+ "byteorder",
+ "bytes",
+ "fallible-iterator",
+ "hmac",
+ "md-5",
+ "memchr",
+ "rand",
+ "sha2",
+ "stringprep",
+]
+
+[[package]]
+name = "postgres-types"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c"
+dependencies = [
+ "bytes",
+ "fallible-iterator",
+ "postgres-protocol",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "predicates"
+version = "3.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dfc28575c2e3f19cb3c73b93af36460ae898d426eba6fc15b9bd2a5220758a0"
+dependencies = [
+ "anstyle",
+ "itertools 0.11.0",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proptest"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf"
+dependencies = [
+ "bit-set",
+ "bit-vec",
+ "bitflags 2.4.1",
+ "lazy_static",
+ "num-traits",
+ "rand",
+ "rand_chacha",
+ "rand_xorshift",
+ "regex-syntax 0.8.2",
+ "rusty-fork",
+ "tempfile",
+ "unarray",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_distr"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
+dependencies = [
+ "num-traits",
+ "rand",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+dependencies = [
+ "getrandom",
+ "libredox",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "ring"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc",
+ "spin",
+ "untrusted",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
+dependencies = [
+ "semver 0.11.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.20",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.12",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "rusty-fork"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
+dependencies = [
+ "fnv",
+ "quick-error",
+ "tempfile",
+ "wait-timeout",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "seahash"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "seq-macro"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4"
+
+[[package]]
+name = "serde"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_cbor"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
+dependencies = [
+ "half 1.8.2",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_regex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf"
+dependencies = [
+ "regex",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "service"
+version = "0.0.0"
+dependencies = [
+ "arc-swap",
+ "arrayvec",
+ "bincode",
+ "bytemuck",
+ "byteorder",
+ "c",
+ "crc32fast",
+ "crossbeam",
+ "dashmap",
+ "detect",
+ "half 2.3.1",
+ "libc",
+ "log",
+ "memmap2",
+ "memoffset",
+ "multiversion",
+ "num-traits",
+ "parking_lot",
+ "rand",
+ "rayon",
+ "rustix 0.38.28",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "ulock-sys",
+ "uuid",
+ "validator",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "similar"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597"
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "sluice"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5"
+dependencies = [
+ "async-channel 1.9.0",
+ "futures-core",
+ "futures-io",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "sptr"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a"
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "std_detect"
+version = "0.1.5"
+source = "git+https://github.com/tensorchord/stdarch.git?branch=avx512fp16#db0cdbc9b02074bfddabfd23a4a681f21640eada"
+dependencies = [
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "stringprep"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6"
+dependencies = [
+ "finl_unicode",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sysinfo"
+version = "0.29.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd727fc423c2060f6c92d9534cef765c65a6ed3f428a03d7def74a8c4348e666"
+dependencies = [
+ "cfg-if",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "target-features"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfb5fa503293557c5158bd215fdc225695e567a77e453f5d4452a50a193969bd"
+
+[[package]]
+name = "tempfile"
+version = "3.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"
+dependencies = [
+ "cfg-if",
+ "fastrand 2.0.1",
+ "redox_syscall",
+ "rustix 0.38.28",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "thiserror"
+version = "1.0.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.35.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.5",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "tokio-postgres"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8"
+dependencies = [
+ "async-trait",
+ "byteorder",
+ "bytes",
+ "fallible-iterator",
+ "futures-channel",
+ "futures-util",
+ "log",
+ "parking_lot",
+ "percent-encoding",
+ "phf",
+ "pin-project-lite",
+ "postgres-protocol",
+ "postgres-types",
+ "rand",
+ "socket2 0.5.5",
+ "tokio",
+ "tokio-util",
+ "whoami",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "ulock-sys"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32ad66e1a230c3dd9e07cf0065e3f6afef1fc270716f2ba419b2ddb19971ccfa"
+dependencies = [
+ "cty",
+]
+
+[[package]]
+name = "unarray"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
+
+[[package]]
+name = "unescape"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccb97dac3243214f8d8507998906ca3e2e0b900bf9bf4870477f125b82e68f6e"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "ureq"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97"
+dependencies = [
+ "base64",
+ "flate2",
+ "log",
+ "once_cell",
+ "rustls",
+ "rustls-webpki",
+ "serde",
+ "serde_json",
+ "url",
+ "webpki-roots",
+]
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.5.0",
+ "percent-encoding",
+]
+
+[[package]]
+name = "uuid"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
+dependencies = [
+ "getrandom",
+ "serde",
+]
+
+[[package]]
+name = "validator"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b92f40481c04ff1f4f61f304d61793c7b56ff76ac1469f1beb199b1445b253bd"
+dependencies = [
+ "idna 0.4.0",
+ "lazy_static",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "url",
+ "validator_derive",
+]
+
+[[package]]
+name = "validator_derive"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc44ca3088bb3ba384d9aecf40c6a23a676ce23e09bdaca2073d99c207f864af"
+dependencies = [
+ "if_chain",
+ "lazy_static",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn 1.0.109",
+ "validator_types",
+]
+
+[[package]]
+name = "validator_types"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "111abfe30072511849c5910134e8baf8dc05de4c0e5903d681cbd5c9c4d611e3"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "value-bag"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a72e1902dde2bd6441347de2b70b7f5d59bf157c6c62f0c44572607a1d55bbe"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vectors"
+version = "0.0.0"
+dependencies = [
+ "bincode",
+ "bytemuck",
+ "byteorder",
+ "detect",
+ "env_logger",
+ "half 2.3.1",
+ "httpmock",
+ "libc",
+ "log",
+ "mockall",
+ "num-traits",
+ "openai_api_rust",
+ "pgrx",
+ "pgrx-tests",
+ "rand",
+ "rustix 0.38.28",
+ "serde",
+ "serde_json",
+ "service",
+ "thiserror",
+ "toml",
+ "validator",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.43",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
+
+[[package]]
+name = "whoami"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50"
+dependencies = [
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a4882e6b134d6c28953a387571f1acdd3496830d5e36c5e3a1075580ea641c"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/default.nix
new file mode 100644
index 000000000000..d6a4f24bf5e6
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvecto-rs/default.nix
@@ -0,0 +1,102 @@
+{ lib
+, buildPgrxExtension
+, cargo-pgrx_0_11_2
+, clang_16
+, fetchCrate
+, fetchFromGitHub
+, nix-update-script
+, nixosTests
+, openssl
+, pkg-config
+, postgresql
+, rustPlatform
+, stdenv
+, substituteAll
+}:
+
+let
+  # Upstream only works with clang 16, so we're pinning it here to
+  # avoid future incompatibility.
+  # See https://docs.pgvecto.rs/developers/development.html#environment, step 4
+  clang = clang_16;
+  rustPlatform' = rustPlatform // {
+    bindgenHook = rustPlatform.bindgenHook.override { inherit clang; };
+  };
+
+in
+(buildPgrxExtension.override {
+  # Upstream only works with a fixed version of cargo-pgrx for each release,
+  # so we're pinning it here to avoid future incompatibility.
+  # See https://docs.pgvecto.rs/developers/development.html#environment, step 6
+  cargo-pgrx = cargo-pgrx_0_11_2;
+  rustPlatform = rustPlatform';
+}) rec {
+  inherit postgresql;
+
+  pname = "pgvecto-rs";
+  version = "0.2.1";
+
+  buildInputs = [ openssl ];
+  nativeBuildInputs = [ pkg-config ];
+
+  patches = [
+    # Tell the `c` crate to use the flags from the rust bindgen hook
+    (substituteAll {
+      src = ./0001-read-clang-flags-from-environment.diff;
+      clang = lib.getExe clang;
+    })
+  ];
+
+  src = fetchFromGitHub {
+    owner = "tensorchord";
+    repo = "pgvecto.rs";
+    rev = "v${version}";
+    hash = "sha256-kwaGHerEVh6Oxb9jQupSapm7CsKl5CoH6jCv+zbi4FE=";
+  };
+
+  # Package has git dependencies on Cargo.lock (instead of just crate.io dependencies),
+  # so cargoHash does not work, therefore we have to include Cargo.lock in nixpkgs.
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "openai_api_rust-0.1.8" = "sha256-os5Y8KIWXJEYEcNzzT57wFPpEXdZ2Uy9W3j5+hJhhR4=";
+      "std_detect-0.1.5" = "sha256-RwWejfqyGOaeU9zWM4fbb/hiO1wMpxYPKEjLO0rtRmU=";
+    };
+  };
+
+  # Set appropriate version on vectors.control, otherwise it won't show up on PostgreSQL
+  postPatch = ''
+    substituteInPlace ./vectors.control --subst-var-by CARGO_VERSION ${version}
+  '';
+
+  # Include upgrade scripts in the final package
+  # https://github.com/tensorchord/pgvecto.rs/blob/v0.2.0/scripts/ci_package.sh#L6-L8
+  postInstall = ''
+    cp sql/upgrade/* $out/share/postgresql/extension/
+  '';
+
+  env = {
+    # Needed to get openssl-sys to use pkg-config.
+    OPENSSL_NO_VENDOR = 1;
+
+    # Bypass rust nightly features not being available on rust stable
+    RUSTC_BOOTSTRAP = 1;
+  };
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = {
+      pgvecto-rs = nixosTests.pgvecto-rs;
+    };
+  };
+
+  meta = with lib; {
+    # The pgrx 0.11.2 dependency is broken in aarch64-linux: https://github.com/pgcentralfoundation/pgrx/issues/1429
+    # It is fixed in pgrx 0.11.3, but upstream is still using pgrx 0.11.2
+    broken = (stdenv.isLinux && stdenv.isAarch64) || stdenv.isDarwin;
+    description = "Scalable, Low-latency and Hybrid-enabled Vector Search in Postgres";
+    homepage = "https://github.com/tensorchord/pgvecto.rs";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ diogotcorreia esclear ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvector.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvector.nix
new file mode 100644
index 000000000000..1dfda512e1d4
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/pgvector.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pgvector";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "pgvector";
+    repo = "pgvector";
+    rev = "v${version}";
+    hash = "sha256-r+TpFJg6WrMn0L2B7RpmSRvw3XxpHzMRtpFWDCzLvgs=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    install -D -t $out/lib vector${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension sql/vector-*.sql
+    install -D -t $out/share/postgresql/extension vector.control
+  '';
+
+  meta = with lib; {
+    description = "Open-source vector similarity search for PostgreSQL";
+    homepage = "https://github.com/pgvector/pgvector";
+    changelog = "https://github.com/pgvector/pgvector/raw/v${version}/CHANGELOG.md";
+    license = licenses.postgresql;
+    platforms = postgresql.meta.platforms;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/plpgsql_check.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/plpgsql_check.nix
new file mode 100644
index 000000000000..ac6f0e948722
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/plpgsql_check.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, postgresql, postgresqlTestHook }:
+
+stdenv.mkDerivation rec {
+  pname = "plpgsql-check";
+  version = "2.7.4";
+
+  src = fetchFromGitHub {
+    owner = "okbob";
+    repo = "plpgsql_check";
+    rev = "v${version}";
+    hash = "sha256-qPYH6i8XJZVH+5zM/gozf+0Kts/Tzv6fRWkayGEe+5U=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    install -D -t $out/lib *${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  passthru.tests.extension = stdenv.mkDerivation {
+    name = "plpgsql-check-test";
+    dontUnpack = true;
+    doCheck = true;
+    buildInputs = [ postgresqlTestHook ];
+    nativeCheckInputs = [ (postgresql.withPackages (ps: [ ps.plpgsql_check ])) ];
+    postgresqlTestUserOptions = "LOGIN SUPERUSER";
+    failureHook = "postgresqlStop";
+    checkPhase = ''
+      runHook preCheck
+      psql -a -v ON_ERROR_STOP=1 -c "CREATE EXTENSION plpgsql_check;"
+      runHook postCheck
+    '';
+    installPhase = "touch $out";
+  };
+
+  meta = with lib; {
+    description = "Linter tool for language PL/pgSQL";
+    homepage = "https://github.com/okbob/plpgsql_check";
+    changelog = "https://github.com/okbob/plpgsql_check/releases/tag/v${version}";
+    platforms = postgresql.meta.platforms;
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/plr.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/plr.nix
new file mode 100644
index 000000000000..1800b424716f
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/plr.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, R, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "plr";
+  version = "8.4.6";
+
+  src = fetchFromGitHub {
+    owner = "postgres-plr";
+    repo = "plr";
+    rev = "REL${builtins.replaceStrings ["."] ["_"] version}";
+    sha256 = "sha256-c+wKWL66pulihVQnhdbzivrZOMD1/FfOpb+vFoHgqVg=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ R postgresql ];
+  preBuild = ''
+    export USE_PGXS=1
+  '';
+  installPhase = ''
+    install -D plr${postgresql.dlSuffix} -t $out/lib/
+    install -D {plr--*.sql,plr.control} -t $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "PL/R - R Procedural Language for PostgreSQL";
+    homepage = "https://github.com/postgres-plr/plr";
+    maintainers = with maintainers; [ qoelet ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.gpl2Only;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/0001-build-Allow-using-V8-from-system.patch b/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/0001-build-Allow-using-V8-from-system.patch
new file mode 100644
index 000000000000..05f607911f20
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/0001-build-Allow-using-V8-from-system.patch
@@ -0,0 +1,47 @@
+diff --git a/Makefile b/Makefile
+index 38879cc..6e78eeb 100644
+--- a/Makefile
++++ b/Makefile
+@@ -20,6 +20,7 @@ OBJS = $(SRCS:.cc=.o)
+ MODULE_big = plv8-$(PLV8_VERSION)
+ EXTENSION = plv8
+ PLV8_DATA = plv8.control plv8--$(PLV8_VERSION).sql
++USE_SYSTEM_V8 = 0
+ 
+ 
+ # Platform detection
+@@ -41,6 +42,7 @@ PGXS := $(shell $(PG_CONFIG) --pgxs)
+ PG_VERSION_NUM := $(shell cat `$(PG_CONFIG) --includedir-server`/pg_config*.h \
+ 		   | perl -ne 'print $$1 and exit if /PG_VERSION_NUM\s+(\d+)/')
+ 
++ifeq ($(USE_SYSTEM_V8),0)
+ AUTOV8_DIR = build/v8
+ AUTOV8_OUT = build/v8/out.gn/obj
+ AUTOV8_STATIC_LIBS = -lv8_libplatform -lv8_libbase
+@@ -66,6 +68,7 @@ v8:
+ 	make -f Makefiles/Makefile.macos v8
+ endif
+ endif
++endif
+ 
+ # enable direct jsonb conversion by default
+ CCFLAGS += -DJSONB_DIRECT_CONVERSION
+@@ -83,6 +86,7 @@ ifdef BIGINT_GRACEFUL
+ endif
+ 
+ 
++ifeq ($(USE_SYSTEM_V8),0)
+ # We're gonna build static link.  Rip it out after include Makefile
+ SHLIB_LINK := $(filter-out -lv8, $(SHLIB_LINK))
+ 
+@@ -101,6 +105,7 @@ else
+ 		SHLIB_LINK += -lrt -std=c++14 
+ 	endif
+ endif
++endif
+ 
+ DATA = $(PLV8_DATA)
+ ifndef DISABLE_DIALECT
+-- 
+2.37.3
+
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/default.nix
new file mode 100644
index 000000000000..fa2f1b7ad2d8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/plv8/default.nix
@@ -0,0 +1,144 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, v8
+, perl
+, postgresql
+, jitSupport
+# For test
+, runCommand
+, coreutils
+, gnugrep
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "plv8";
+  version = "3.1.10";
+
+  src = fetchFromGitHub {
+    owner = "plv8";
+    repo = "plv8";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-g1A/XPC0dX2360Gzvmo9/FSQnM6Wt2K4eR0pH0p9fz4=";
+  };
+
+  patches = [
+    # Allow building with system v8.
+    # https://github.com/plv8/plv8/pull/505 (rejected)
+    ./0001-build-Allow-using-V8-from-system.patch
+  ];
+
+  nativeBuildInputs = [
+    perl
+  ];
+
+  buildInputs = [
+    v8
+    postgresql
+  ];
+
+  buildFlags = [ "all" ];
+
+  makeFlags = [
+    # Nixpkgs build a v8 monolith instead of separate v8_libplatform.
+    "USE_SYSTEM_V8=1"
+    "SHLIB_LINK=-lv8"
+    "V8_OUTDIR=${v8}/lib"
+  ];
+
+  installFlags = [
+    # PGXS only supports installing to postgresql prefix so we need to redirect this
+    "DESTDIR=${placeholder "out"}"
+  ];
+
+  # No configure script.
+  dontConfigure = true;
+
+  postPatch = ''
+    patchShebangs ./generate_upgrade.sh
+    # https://github.com/plv8/plv8/pull/506
+    substituteInPlace generate_upgrade.sh \
+      --replace " 2.3.10 " " 2.3.10 2.3.11 2.3.12 2.3.13 2.3.14 2.3.15 "
+  '';
+
+  postInstall = ''
+    # Move the redirected to proper directory.
+    # There appear to be no references to the install directories
+    # so changing them does not cause issues.
+    mv "$out/nix/store"/*/* "$out"
+    rmdir "$out/nix/store"/* "$out/nix/store" "$out/nix"
+  '';
+
+  passthru = {
+    tests =
+      let
+        postgresqlWithSelf = postgresql.withPackages (_: [
+          finalAttrs.finalPackage
+        ]);
+      in {
+        smoke = runCommand "plv8-smoke-test" {} ''
+          export PATH=${lib.makeBinPath [
+            postgresqlWithSelf
+            coreutils
+            gnugrep
+          ]}
+          db="$PWD/testdb"
+          initdb "$db"
+          postgres -k "$db" -D "$db" &
+          pid="$!"
+
+          for i in $(seq 1 100); do
+            if psql -h "$db" -d postgres -c "" 2>/dev/null; then
+              break
+            elif ! kill -0 "$pid"; then
+              exit 1
+            else
+              sleep 0.1
+            fi
+          done
+
+          psql -h "$db" -d postgres -c 'CREATE EXTENSION plv8; DO $$ plv8.elog(NOTICE, plv8.version); $$ LANGUAGE plv8;' 2> "$out"
+          grep -q "${finalAttrs.version}" "$out"
+          kill -0 "$pid"
+        '';
+
+        regression = stdenv.mkDerivation {
+          name = "plv8-regression";
+          inherit (finalAttrs) src patches nativeBuildInputs buildInputs dontConfigure;
+
+          buildPhase = ''
+            runHook preBuild
+
+            # The regression tests need to be run in the order specified in the Makefile.
+            echo -e "include Makefile\nprint_regress_files:\n\t@echo \$(REGRESS)" > Makefile.regress
+            REGRESS_TESTS=$(make -f Makefile.regress print_regress_files)
+
+            ${postgresql}/lib/pgxs/src/test/regress/pg_regress \
+              --bindir='${postgresqlWithSelf}/bin' \
+              --temp-instance=regress-instance \
+              --dbname=contrib_regression \
+              $REGRESS_TESTS
+
+            runHook postBuild
+          '';
+
+          installPhase = ''
+            runHook preInstall
+
+            touch "$out"
+
+            runHook postInstall
+          '';
+        };
+      };
+  };
+
+  meta = with lib; {
+    description = "V8 Engine Javascript Procedural Language add-on for PostgreSQL";
+    homepage = "https://plv8.github.io/";
+    maintainers = with maintainers; [ marsam ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    license = licenses.postgresql;
+    broken = jitSupport;
+  };
+})
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/postgis.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/postgis.nix
new file mode 100644
index 000000000000..523bd154f6e5
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/postgis.nix
@@ -0,0 +1,87 @@
+{ fetchurl
+, lib, stdenv
+, perl
+, libxml2
+, postgresql
+, geos
+, proj
+, gdalMinimal
+, json_c
+, pkg-config
+, file
+, protobufc
+, libiconv
+, pcre2
+, nixosTests
+, jitSupport
+, llvm
+}:
+
+let
+  gdal = gdalMinimal;
+in
+stdenv.mkDerivation rec {
+  pname = "postgis";
+  version = "3.4.2";
+
+  outputs = [ "out" "doc" ];
+
+  src = fetchurl {
+    url = "https://download.osgeo.org/postgis/source/postgis-${version}.tar.gz";
+    sha256 = "sha256-yMh0wAukqYSocDCva/lUSCFQIGCtRz1clvHU0INcWJI=";
+  };
+
+  buildInputs = [ libxml2 postgresql geos proj gdal json_c protobufc pcre2.dev ]
+                ++ lib.optional stdenv.isDarwin libiconv;
+  nativeBuildInputs = [ perl pkg-config ] ++ lib.optional jitSupport llvm;
+  dontDisableStatic = true;
+
+  # postgis config directory assumes /include /lib from the same root for json-c library
+  env.NIX_LDFLAGS = "-L${lib.getLib json_c}/lib";
+
+
+  preConfigure = ''
+    sed -i 's@/usr/bin/file@${file}/bin/file@' configure
+    configureFlags="--datadir=$out/share/postgresql --datarootdir=$out/share/postgresql --bindir=$out/bin --docdir=$doc/share/doc/${pname} --with-gdalconfig=${gdal}/bin/gdal-config --with-jsondir=${json_c.dev} --disable-extension-upgrades-install"
+
+    makeFlags="PERL=${perl}/bin/perl datadir=$out/share/postgresql pkglibdir=$out/lib bindir=$out/bin docdir=$doc/share/doc/${pname}"
+  '';
+  postConfigure = ''
+    sed -i "s|@mkdir -p \$(DESTDIR)\$(PGSQL_BINDIR)||g ;
+            s|\$(DESTDIR)\$(PGSQL_BINDIR)|$prefix/bin|g
+            " \
+        "raster/loader/Makefile";
+    sed -i "s|\$(DESTDIR)\$(PGSQL_BINDIR)|$prefix/bin|g
+            " \
+        "raster/scripts/python/Makefile";
+    mkdir -p $out/bin
+
+    # postgis' build system assumes it is being installed to the same place as postgresql, and looks
+    # for the postgres binary relative to $PREFIX. We gently support this system using an illusion.
+    ln -s ${postgresql}/bin/postgres $out/bin/postgres
+  '';
+
+  # create aliases for all commands adding version information
+  postInstall = ''
+    # Teardown the illusory postgres used for building; see postConfigure.
+    rm $out/bin/postgres
+
+    for prog in $out/bin/*; do # */
+      ln -s $prog $prog-${version}
+    done
+
+    mkdir -p $doc/share/doc/postgis
+    mv doc/* $doc/share/doc/postgis/
+  '';
+
+  passthru.tests.postgis = nixosTests.postgis;
+
+  meta = with lib; {
+    description = "Geographic Objects for PostgreSQL";
+    homepage = "https://postgis.net/";
+    changelog = "https://git.osgeo.org/gitea/postgis/postgis/raw/tag/${version}/NEWS";
+    license = licenses.gpl2;
+    maintainers = with maintainers; teams.geospatial.members ++ [ marcweber ];
+    inherit (postgresql.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/promscale_extension.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/promscale_extension.nix
new file mode 100644
index 000000000000..80de9315d985
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/promscale_extension.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, buildPgxExtension
+, postgresql
+, stdenv
+, nixosTests
+}:
+
+buildPgxExtension rec {
+  inherit postgresql;
+
+  pname = "promscale_extension";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "timescale";
+    repo = "promscale_extension";
+    rev = version;
+    sha256 = "sha256-vyEfQMGguHrHYdBEEmbev29L2uCa/4xL9DpGIniUwfI=";
+  };
+
+  cargoSha256 = "sha256-VK9DObkg4trcGUXxxISCd0zqU3vc1Qt6NxqpgKIARCQ=";
+
+  cargoPatches = [
+    # there is a duplicate definition in the lock file which fails to build with buildRustPackage
+    (fetchpatch {
+      name = "cargo-vendor.patch";
+      url = "https://github.com/timescale/promscale_extension/commit/3048bd959430e9abc2c1d5c772ab6b4fc1dc6a95.patch";
+      hash = "sha256-xTk4Ml8GN06QlJdrvAdVK21r30ZR/S83y5A5jJPdOw4=";
+    })
+  ];
+
+  preBuild = ''
+    patchShebangs create-upgrade-symlinks.sh extract-extension-version.sh
+    ## Hack to boostrap the build because some pgx commands require this file. It gets re-generated later.
+    cp templates/promscale.control ./promscale.control
+  '';
+  postInstall = ''
+    ln -s $out/lib/promscale-${version}.so $out/lib/promscale.so
+  '';
+  passthru.tests = {
+    promscale = nixosTests.promscale;
+  };
+
+  # tests take really long
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Promscale is an open source observability backend for metrics and traces powered by SQL";
+    homepage = "https://github.com/timescale/promscale_extension";
+    maintainers = with maintainers; [ anpin ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.unfree;
+
+    # as it needs to be used with timescaledb, simply use the condition from there
+    broken = versionAtLeast postgresql.version "15";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/repmgr.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/repmgr.nix
new file mode 100644
index 000000000000..e4e8c5afdb24
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/repmgr.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, postgresql
+, openssl
+, zlib
+, readline
+, flex
+, curl
+, json_c
+, libxcrypt
+}:
+
+stdenv.mkDerivation rec {
+  pname = "repmgr";
+  version = "5.4.1";
+
+  src = fetchFromGitHub {
+    owner = "EnterpriseDB";
+    repo = "repmgr";
+    rev = "v${version}";
+    sha256 = "sha256-OaEoP1BajVW9dt8On9Ppf8IXmAk47HHv8zKw3WlsLHw=";
+  };
+
+  nativeBuildInputs = [ flex ];
+
+  buildInputs = postgresql.buildInputs ++ [ postgresql curl json_c ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,lib,share/postgresql/extension}
+
+    cp repmgr{,d} $out/bin
+    cp *${postgresql.dlSuffix} $out/lib
+    cp *.sql      $out/share/postgresql/extension
+    cp *.control  $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    homepage = "https://repmgr.org/";
+    description = "Replication manager for PostgreSQL cluster";
+    license = licenses.postgresql;
+    platforms = postgresql.meta.platforms;
+    maintainers = with maintainers; [ zimbatm ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/rum.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/rum.nix
new file mode 100644
index 000000000000..0fb6635529ae
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/rum.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "rum";
+  version = "1.3.13";
+
+  src = fetchFromGitHub {
+    owner = "postgrespro";
+    repo = "rum";
+    rev = version;
+    hash = "sha256-yy2xeDnk3fENN+En0st4mv60nZlqPafIzwf68jwJ5fE=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  makeFlags = [ "USE_PGXS=1" ];
+
+  installPhase = ''
+    install -D -t $out/lib *${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.control
+    install -D -t $out/share/postgresql/extension *.sql
+  '';
+
+  meta = with lib; {
+    description = "Full text search index method for PostgreSQL";
+    homepage = "https://github.com/postgrespro/rum";
+    license = licenses.postgresql;
+    platforms = postgresql.meta.platforms;
+    maintainers = with maintainers; [ DeeUnderscore ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/smlar.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/smlar.nix
new file mode 100644
index 000000000000..3bbd19b862fd
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/smlar.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchgit, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "smlar-unstable";
+  version = "2021-11-08";
+
+  src = fetchgit {
+    url = "git://sigaev.ru/smlar.git";
+    rev = "f2522d5f20a46a3605a761d34a3aefcdffb94e71";
+    sha256 = "sha256-AC6w7uYw0OW70pQpWbK1A3rkCnMvTJzTCAdFiY3rO7A=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  makeFlags = [ "USE_PGXS=1" ];
+
+  installPhase = ''
+    install -D -t $out/lib *.so
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+  '';
+
+  meta = with lib; {
+    description = "Compute similary of any one-dimensional arrays";
+    homepage = "http://sigaev.ru/git/gitweb.cgi?p=smlar.git";
+    platforms = postgresql.meta.platforms;
+    license = licenses.bsd2;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/tds_fdw.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/tds_fdw.nix
new file mode 100644
index 000000000000..9986f2131f30
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/tds_fdw.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, postgresql, freetds, unstableGitUpdater }:
+
+stdenv.mkDerivation rec {
+  pname = "tds_fdw";
+  # Move to stable version when it's released.
+  version = "unstable-2024-02-10";
+
+  buildInputs = [ postgresql freetds ];
+
+  src = fetchFromGitHub {
+    owner  = "tds-fdw";
+    repo   = "tds_fdw";
+    rev    = "f78bd38955d01d3ca357b90717588ec2f90b4991";
+    hash   = "sha256-3J8wzk0YIxRPhALd5PgVW000hzQw3r4rTrnqg9uB/Bo=";
+  };
+
+  installPhase = ''
+    version="$(sed -En "s,^default_version *= *'([^']*)'.*,\1,p" tds_fdw.control)"
+    install -D tds_fdw${postgresql.dlSuffix} -t $out/lib
+    install -D sql/tds_fdw.sql    "$out/share/postgresql/extension/tds_fdw--$version.sql"
+    install -D tds_fdw.control -t $out/share/postgresql/extension
+  '';
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    description = "A PostgreSQL foreign data wrapper to connect to TDS databases (Sybase and Microsoft SQL Server)";
+    homepage    = "https://github.com/tds-fdw/tds_fdw";
+    maintainers = [ maintainers.steve-chavez ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/temporal_tables.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/temporal_tables.nix
new file mode 100644
index 000000000000..cb401829b242
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/temporal_tables.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "temporal_tables";
+  version = "1.2.2";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "arkhipov";
+    repo   = "temporal_tables";
+    rev    = "v${version}";
+    sha256 = "sha256-7+DCSPAPhsokWDq/5IXNhd7jY6FfzxxUjlsg/VJeD3k=";
+  };
+
+  installPhase = ''
+    install -D -t $out/lib temporal_tables${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension *.sql
+    install -D -t $out/share/postgresql/extension *.control
+ '';
+
+  meta = with lib; {
+    description = "Temporal Tables PostgreSQL Extension";
+    homepage    = "https://github.com/arkhipov/temporal_tables";
+    maintainers = with maintainers; [ ggpeti ];
+    platforms   = postgresql.meta.platforms;
+    license     = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/timescaledb.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/timescaledb.nix
new file mode 100644
index 000000000000..8e1147630a84
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/timescaledb.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, cmake, postgresql, openssl, libkrb5, enableUnfree ? true }:
+
+stdenv.mkDerivation rec {
+  pname = "timescaledb${lib.optionalString (!enableUnfree) "-apache"}";
+  version = "2.14.2";
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ postgresql openssl libkrb5 ];
+
+  src = fetchFromGitHub {
+    owner = "timescale";
+    repo = "timescaledb";
+    rev = version;
+    hash = "sha256-gJViEWHtIczvIiQKuvvuwCfWJMxAYoBhCHhD75no6r0=";
+  };
+
+  cmakeFlags = [ "-DSEND_TELEMETRY_DEFAULT=OFF" "-DREGRESS_CHECKS=OFF" "-DTAP_CHECKS=OFF" ]
+    ++ lib.optionals (!enableUnfree) [ "-DAPACHE_ONLY=ON" ]
+    ++ lib.optionals stdenv.isDarwin [ "-DLINTER=OFF" ];
+
+  # Fix the install phase which tries to install into the pgsql extension dir,
+  # and cannot be manually overridden. This is rather fragile but works OK.
+  postPatch = ''
+    for x in CMakeLists.txt sql/CMakeLists.txt; do
+      substituteInPlace "$x" \
+        --replace 'DESTINATION "''${PG_SHAREDIR}/extension"' "DESTINATION \"$out/share/postgresql/extension\""
+    done
+
+    for x in src/CMakeLists.txt src/loader/CMakeLists.txt tsl/src/CMakeLists.txt; do
+      substituteInPlace "$x" \
+        --replace 'DESTINATION ''${PG_PKGLIBDIR}' "DESTINATION \"$out/lib\""
+    done
+  '';
+
+  meta = with lib; {
+    description = "Scales PostgreSQL for time-series data via automatic partitioning across time and space";
+    homepage = "https://www.timescale.com/";
+    changelog = "https://github.com/timescale/timescaledb/blob/${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ marsam ];
+    platforms = postgresql.meta.platforms;
+    license = with licenses; if enableUnfree then tsl else asl20;
+    broken = versionOlder postgresql.version "13";
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/timescaledb_toolkit.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/timescaledb_toolkit.nix
new file mode 100644
index 000000000000..96bff3fe20b3
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/timescaledb_toolkit.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchFromGitHub
+, buildPgrxExtension
+, postgresql
+, nixosTests
+, cargo-pgrx_0_10_2
+, fetchCrate
+, nix-update-script
+, stdenv
+}:
+
+(buildPgrxExtension.override { cargo-pgrx = cargo-pgrx_0_10_2; }) rec {
+  inherit postgresql;
+
+  pname = "timescaledb_toolkit";
+  version = "1.18.0";
+
+  src = fetchFromGitHub {
+    owner = "timescale";
+    repo = "timescaledb-toolkit";
+    rev = version;
+    hash = "sha256-Lm/LFBkG91GeWlJL9RBqP8W0tlhBEeGQ6kXUzzv4xRE=";
+  };
+
+  cargoHash = "sha256-LME8oftHmmiN8GU3eTBTSB6m0CE+KtDFRssL1g2Cjm8=";
+  buildAndTestSubdir = "extension";
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = {
+      timescaledb_toolkit = nixosTests.timescaledb;
+    };
+  };
+
+  # tests take really long
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Provide additional tools to ease all things analytic when using TimescaleDB";
+    homepage = "https://github.com/timescale/timescaledb-toolkit";
+    maintainers = with maintainers; [ typetetris ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.asl20;
+
+    # as it needs to be used with timescaledb, simply use the condition from there
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/tsearch_extras.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/tsearch_extras.nix
new file mode 100644
index 000000000000..b42095acd715
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/tsearch_extras.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation {
+  pname = "tsearch-extras";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner  = "zulip";
+    repo   = "tsearch_extras";
+    rev    = "84e78f00931c4ef261d98197d6b5d94fc141f742"; # no release tag?
+    sha256 = "18j0saqblg3jhrz38splk173xjwdf32c67ymm18m8n5y94h8d2ba";
+  };
+
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    install -D tsearch_extras${postgresql.dlSuffix} -t $out/lib/
+    install -D ./{tsearch_extras--1.0.sql,tsearch_extras.control} -t $out/share/postgresql/extension
+  '';
+
+  meta = with lib; {
+    description = "Provides a few PostgreSQL functions for a lower-level data full text search";
+    homepage = "https://github.com/zulip/tsearch_extras/";
+    license = licenses.postgresql;
+    platforms = postgresql.meta.platforms;
+    maintainers = with maintainers; [ DerTim1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/tsja.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/tsja.nix
new file mode 100644
index 000000000000..f62eae5b6a3e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/tsja.nix
@@ -0,0 +1,45 @@
+{ lib
+, fetchzip
+, nixosTests
+, stdenv
+
+, mecab
+, postgresql
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tsja";
+  version = "0.5.0";
+
+  src = fetchzip {
+    url = "https://www.amris.jp/tsja/tsja-${version}.tar.xz";
+    hash = "sha256-h59UhUG/7biN8NaDiGK6kXDqfhR9uMzt8CpwbJ+PpEM=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/local/pgsql ${postgresql} \
+      --replace -L/usr/local/lib "" \
+      --replace -I/usr/local/include ""
+    substituteInPlace tsja.c --replace /usr/local/lib/mecab ${mecab}/lib/mecab
+  '';
+
+  buildInputs = [ mecab postgresql ];
+
+  installPhase = ''
+    mkdir -p $out/lib $out/share/postgresql/extension
+    mv libtsja.so $out/lib
+    mv dbinit_libtsja.txt $out/share/postgresql/extension/libtsja_dbinit.sql
+  '';
+
+  passthru.tests.tsja = nixosTests.tsja;
+
+  meta = with lib; {
+    description = "PostgreSQL extension implementing Japanese text search";
+    homepage = "https://www.amris.jp/tsja/index.html";
+    maintainers = with maintainers; [ chayleaf ];
+    # GNU-specific linker options are used
+    platforms = platforms.gnu;
+    license = licenses.gpl2Only;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/ext/wal2json.nix b/nixpkgs/pkgs/servers/sql/postgresql/ext/wal2json.nix
new file mode 100644
index 000000000000..26d4cb0c1541
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/ext/wal2json.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "wal2json";
+  version = "2.5";
+
+  src = fetchFromGitHub {
+    owner = "eulerto";
+    repo = "wal2json";
+    rev = "wal2json_${builtins.replaceStrings ["."] ["_"] version}";
+    sha256 = "sha256-Gpc9uDKrs/dmVSFgdgHM453+TaEnhRh9t0gDbSn8FUI=";
+  };
+
+  buildInputs = [ postgresql ];
+
+  makeFlags = [ "USE_PGXS=1" ];
+
+  installPhase = ''
+    install -D -t $out/lib *${postgresql.dlSuffix}
+    install -D -t $out/share/postgresql/extension sql/*.sql
+  '';
+
+  meta = with lib; {
+    description = "PostgreSQL JSON output plugin for changeset extraction";
+    homepage = "https://github.com/eulerto/wal2json";
+    changelog = "https://github.com/eulerto/wal2json/releases/tag/wal2json_${version}";
+    maintainers = with maintainers; [ euank ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.bsd3;
+  };
+}