about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/sql/postgresql
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/sql/postgresql')
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/cstore_fdw/default.nix32
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/default.nix152
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks-94.patch12
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks.patch14
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path-96.patch14
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path.patch17
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/jdbc/default.nix26
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/less-is-more-96.patch12
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/less-is-more.patch12
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pg_cron/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pg_hll/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pg_repack/default.nix35
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pg_similarity/default.nix31
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pgjwt/default.nix29
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pgroonga/default.nix30
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/pgtap/default.nix33
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/plv8/default.nix38
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/psqlodbc/default.nix21
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/specify_pkglibdir_at_runtime.patch29
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/timescaledb/default.nix51
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/topn/default.nix32
-rw-r--r--nixpkgs/pkgs/servers/sql/postgresql/tsearch_extras/default.nix29
22 files changed, 711 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/cstore_fdw/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/cstore_fdw/default.nix
new file mode 100644
index 000000000000..a6e2c590f385
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/cstore_fdw/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, postgresql, protobufc }:
+
+stdenv.mkDerivation rec {
+  name = "cstore_fdw-${version}";
+  version = "1.6.2";
+
+  nativeBuildInputs = [ protobufc ];
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "cstore_fdw";
+    rev    = "refs/tags/v${version}";
+    sha256 = "0kdmzpbhhjdg4p6i5963h7qbs88jzgpqc52gz450h7hwb9ckpv74";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/extension}
+
+    cp *.so      $out/lib
+    cp *.sql     $out/share/extension
+    cp *.control $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Columnar storage for PostgreSQL";
+    homepage    = https://www.citusdata.com/;
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = platforms.linux;
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/default.nix
new file mode 100644
index 000000000000..2b56c32d6350
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/default.nix
@@ -0,0 +1,152 @@
+{ lib, stdenv, glibc, fetchurl, zlib, readline, libossp_uuid, openssl, libxml2, makeWrapper, tzdata, systemd, icu, pkgconfig }:
+
+let
+
+  common = { version, sha256, psqlSchema }:
+  let
+    atLeast = lib.versionAtLeast version;
+
+    # Build with ICU by default on versions that support it
+    icuEnabled = atLeast "10";
+  in stdenv.mkDerivation (rec {
+    name = "postgresql-${version}";
+    inherit version;
+
+    src = fetchurl {
+      url = "mirror://postgresql/source/v${version}/${name}.tar.bz2";
+      inherit sha256;
+    };
+
+    outputs = [ "out" "lib" "doc" "man" ];
+    setOutputFlags = false; # $out retains configureFlags :-/
+
+    buildInputs =
+      [ zlib readline openssl libxml2 makeWrapper ]
+      ++ lib.optionals icuEnabled [ icu ]
+      ++ lib.optionals (atLeast "9.6" && !stdenv.isDarwin) [ systemd ]
+      ++ lib.optionals (!stdenv.isDarwin) [ libossp_uuid ];
+
+    nativeBuildInputs = lib.optionals icuEnabled [ pkgconfig ];
+
+    enableParallelBuilding = !stdenv.isDarwin;
+
+    makeFlags = [ "world" ];
+
+    NIX_CFLAGS_COMPILE = [ "-I${libxml2.dev}/include/libxml2" ];
+
+    # Otherwise it retains a reference to compiler and fails; see #44767.  TODO: better.
+    preConfigure = "CC=${stdenv.cc.targetPrefix}cc";
+
+    configureFlags = [
+      "--with-openssl"
+      "--with-libxml"
+      "--sysconfdir=/etc"
+      "--libdir=$(lib)/lib"
+      "--with-system-tzdata=${tzdata}/share/zoneinfo"
+      (lib.optionalString (atLeast "9.6" && !stdenv.isDarwin) "--with-systemd")
+      (if stdenv.isDarwin then "--with-uuid=e2fs" else "--with-ossp-uuid")
+    ] ++ lib.optionals icuEnabled [ "--with-icu" ];
+
+    patches =
+      [ (if atLeast "9.4" then ./disable-resolve_symlinks-94.patch else ./disable-resolve_symlinks.patch)
+        (if atLeast "9.6" then ./less-is-more-96.patch             else ./less-is-more.patch)
+        (if atLeast "9.6" then ./hardcode-pgxs-path-96.patch       else ./hardcode-pgxs-path.patch)
+        ./specify_pkglibdir_at_runtime.patch
+      ];
+
+    installTargets = [ "install-world" ];
+
+    LC_ALL = "C";
+
+    postConfigure =
+      let path = if atLeast "9.6" then "src/common/config_info.c" else "src/bin/pg_config/pg_config.c"; in
+        ''
+          # Hardcode the path to pgxs so pg_config returns the path in $out
+          substituteInPlace "${path}" --replace HARDCODED_PGXS_PATH $out/lib
+        '';
+
+    postInstall =
+      ''
+        moveToOutput "lib/pgxs" "$out" # looks strange, but not deleting it
+        moveToOutput "lib/*.a" "$out"
+        moveToOutput "lib/libecpg*" "$out"
+
+        # Prevent a retained dependency on gcc-wrapper.
+        substituteInPlace "$out/lib/pgxs/src/Makefile.global" --replace ${stdenv.cc}/bin/ld ld
+
+        if [ -z "''${dontDisableStatic:-}" ]; then
+          # Remove static libraries in case dynamic are available.
+          for i in $out/lib/*.a; do
+            name="$(basename "$i")"
+            ext="${stdenv.hostPlatform.extensions.sharedLibrary}"
+            if [ -e "$lib/lib/''${name%.a}$ext" ] || [ -e "''${i%.a}$ext" ]; then
+              rm "$i"
+            fi
+          done
+        fi
+      '';
+
+    postFixup = lib.optionalString (!stdenv.isDarwin && stdenv.hostPlatform.libc == "glibc")
+      ''
+        # initdb needs access to "locale" command from glibc.
+        wrapProgram $out/bin/initdb --prefix PATH ":" ${glibc.bin}/bin
+      '';
+
+    doInstallCheck = false; # needs a running daemon?
+
+    disallowedReferences = [ stdenv.cc ];
+
+    passthru = {
+      inherit readline psqlSchema;
+    };
+
+    meta = with lib; {
+      homepage    = https://www.postgresql.org;
+      description = "A powerful, open source object-relational database system";
+      license     = licenses.postgresql;
+      maintainers = with maintainers; [ ocharles thoughtpolice ];
+      platforms   = platforms.unix;
+      knownVulnerabilities = optional (!atLeast "9.4")
+        "PostgreSQL versions older than 9.4 are not maintained anymore!";
+    };
+  });
+
+in {
+
+  postgresql_9_3 = common {
+    version = "9.3.25";
+    psqlSchema = "9.3";
+    sha256 = "1nxn0hjrg4y5v5n2jgzrbicgv4504r2yfjyk6g6rq0sx8603x5g4";
+  };
+
+  postgresql_9_4 = common {
+    version = "9.4.20";
+    psqlSchema = "9.4";
+    sha256 = "0zzqjz5jrn624hzh04drpj6axh30a9k6bgawid6rwk45nbfxicgf";
+  };
+
+  postgresql_9_5 = common {
+    version = "9.5.15";
+    psqlSchema = "9.5";
+    sha256 = "0i2lylgmsmy2g1ixlvl112fryp7jmrd0i2brk8sxb7vzzpg3znnv";
+  };
+
+  postgresql_9_6 = common {
+    version = "9.6.11";
+    psqlSchema = "9.6";
+    sha256 = "0c55akrkzqd6p6a8hr0338wk246hl76r9j16p4zn3s51d7f0l99q";
+  };
+
+  postgresql_10 = common {
+    version = "10.6";
+    psqlSchema = "10.0";
+    sha256 = "0jv26y3f10svrjxzsgqxg956c86b664azyk2wppzpa5x11pjga38";
+  };
+
+  postgresql_11 = common {
+    version = "11.1";
+    psqlSchema = "11.1";
+    sha256 = "026v0sicsh7avzi45waf8shcbhivyxmi7qgn9fd1x0vl520mx0ch";
+  };
+
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks-94.patch b/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks-94.patch
new file mode 100644
index 000000000000..fadeea90ac4b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks-94.patch
@@ -0,0 +1,12 @@
+--- a/src/common/exec.c	2014-09-04 20:19:12.236057588 +0200
++++ b/src/common/exec.c	2014-09-04 20:19:50.550251633 +0200
+@@ -218,6 +218,9 @@
+ static int
+ resolve_symlinks(char *path)
+ {
++	// On NixOS we *want* stuff relative to symlinks.
++	return 0;
++
+ #ifdef HAVE_READLINK
+ 	struct stat buf;
+ 	char		orig_wd[MAXPGPATH],
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks.patch b/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks.patch
new file mode 100644
index 000000000000..3e6fd5e838a2
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/disable-resolve_symlinks.patch
@@ -0,0 +1,14 @@
+diff --git a/src/port/exec.c b/src/port/exec.c
+index c79e8ba..42c4091 100644
+--- a/src/port/exec.c
++++ b/src/port/exec.c
+@@ -216,6 +216,9 @@ find_my_exec(const char *argv0, char *retpath)
+ static int
+ resolve_symlinks(char *path)
+ {
++    // On NixOS we *want* stuff relative to symlinks.
++    return 0;
++
+ #ifdef HAVE_READLINK
+ 	struct stat buf;
+ 	char		orig_wd[MAXPGPATH],
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path-96.patch b/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path-96.patch
new file mode 100644
index 000000000000..6cd449769baa
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path-96.patch
@@ -0,0 +1,14 @@
+diff -Naur postgresql-9.6.1-orig/src/common/config_info.c postgresql-9.6.1/src/common/config_info.c
+--- postgresql-9.6.1-orig/src/common/config_info.c	2016-11-22 21:39:29.231929261 +0100
++++ postgresql-9.6.1/src/common/config_info.c	2016-11-22 23:36:53.685163543 +0100
+@@ -118,7 +118,10 @@
+ 	i++;
+
+ 	configdata[i].name = pstrdup("PGXS");
++	strlcpy(path, "HARDCODED_PGXS_PATH", sizeof(path));
++/* commented out to be able to point to nix $out path
+ 	get_pkglib_path(my_exec_path, path);
++*/
+ 	strlcat(path, "/pgxs/src/makefiles/pgxs.mk", sizeof(path));
+ 	cleanup_path(path);
+ 	configdata[i].setting = pstrdup(path);
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path.patch b/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path.patch
new file mode 100644
index 000000000000..355813ffe20e
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/hardcode-pgxs-path.patch
@@ -0,0 +1,17 @@
+--- a/src/bin/pg_config/pg_config.c
++++ b/src/bin/pg_config/pg_config.c
+@@ -220,11 +220,13 @@ show_sysconfdir(bool all)
+ static void
+ show_pgxs(bool all)
+ {
+-	char		path[MAXPGPATH];
++	char		path[MAXPGPATH] = "HARDCODED_PGXS_PATH";
+ 
+ 	if (all)
+ 		printf("PGXS = ");
++  /* commented out to be able to point to nix $out path
+ 	get_pkglib_path(mypath, path);
++  */
+ 	strlcat(path, "/pgxs/src/makefiles/pgxs.mk", sizeof(path));
+ 	cleanup_path(path);
+ 	printf("%s\n", path);
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/jdbc/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/jdbc/default.nix
new file mode 100644
index 000000000000..c67d72705482
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/jdbc/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchMavenArtifact }:
+
+stdenv.mkDerivation rec {
+  name = "postgresql-jdbc-${version}";
+  version = "42.2.5";
+
+  src = fetchMavenArtifact {
+    artifactId = "postgresql";
+    groupId = "org.postgresql";
+    sha256 = "1p0cbb7ka41xxipzjy81hmcndkqynav22xyipkg7qdqrqvw4dykz";
+    inherit version;
+  };
+
+  phases = [ "installPhase" ];
+
+  installPhase = ''
+    install -m444 -D $src/share/java/*postgresql-${version}.jar $out/share/java/postgresql-jdbc.jar
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = https://jdbc.postgresql.org/;
+    description = "JDBC driver for PostgreSQL allowing Java programs to connect to a PostgreSQL database";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/less-is-more-96.patch b/nixpkgs/pkgs/servers/sql/postgresql/less-is-more-96.patch
new file mode 100644
index 000000000000..f14af9dc2207
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/less-is-more-96.patch
@@ -0,0 +1,12 @@
+diff -Naur postgresql-9.6.1-orig/src/include/fe_utils/print.h postgresql-9.6.1/src/include/fe_utils/print.h
+--- postgresql-9.6.1-orig/src/include/fe_utils/print.h	2016-11-22 21:39:29.148932827 +0100
++++ postgresql-9.6.1/src/include/fe_utils/print.h	2016-11-22 21:39:36.283626258 +0100
+@@ -18,7 +18,7 @@
+ 
+ /* This is not a particularly great place for this ... */
+ #ifndef __CYGWIN__
+-#define DEFAULT_PAGER "more"
++#define DEFAULT_PAGER "less"
+ #else
+ #define DEFAULT_PAGER "less"
+ #endif
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/less-is-more.patch b/nixpkgs/pkgs/servers/sql/postgresql/less-is-more.patch
new file mode 100644
index 000000000000..d640d24bdaad
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/less-is-more.patch
@@ -0,0 +1,12 @@
+diff -Naur postgresql-9.2.7-orig/src/bin/psql/print.h postgresql-9.2.7/src/bin/psql/print.h
+--- postgresql-9.2.7-orig/src/bin/psql/print.h	2014-02-17 14:38:15.000000000 -0500
++++ postgresql-9.2.7/src/bin/psql/print.h	2014-03-04 14:42:28.874014415 -0500
+@@ -178,7 +178,7 @@
+ extern const printTextFormat *get_line_style(const printTableOpt *opt);
+ 
+ #ifndef __CYGWIN__
+-#define DEFAULT_PAGER "more"
++#define DEFAULT_PAGER "less"
+ #else
+ #define DEFAULT_PAGER "less"
+ #endif
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pg_cron/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pg_cron/default.nix
new file mode 100644
index 000000000000..959c2c382524
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pg_cron/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  name = "pg_cron-${version}";
+  version = "1.1.2";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "pg_cron";
+    rev    = "refs/tags/v${version}";
+    sha256 = "0n74dx1wkg9qxvjhnx03028465ap3p97v2kzqww833dws1wqk5m1";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/extension}
+
+    cp *.so      $out/lib
+    cp *.sql     $out/share/extension
+    cp *.control $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Run Cron jobs through PostgreSQL";
+    homepage    = https://www.citusdata.com/;
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = platforms.linux;
+    license     = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pg_hll/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pg_hll/default.nix
new file mode 100644
index 000000000000..f91a8b1bf252
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pg_hll/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  name = "pg_hll-${version}";
+  version = "2.12";
+
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "postgresql-hll";
+    rev    = "refs/tags/v${version}";
+    sha256 = "1jdc9gjqc3dkjxv855q1p594j0awhrrymrcqnl5vw5vx2ny3bpgn";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/extension}
+
+    cp *.so      $out/lib
+    cp *.sql     $out/share/extension
+    cp *.control $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "HyperLogLog for PostgreSQL";
+    homepage    = https://www.citusdata.com/;
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = platforms.linux;
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pg_repack/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pg_repack/default.nix
new file mode 100644
index 000000000000..14f71b1e2b3b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pg_repack/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, postgresql, openssl, zlib, readline }:
+
+stdenv.mkDerivation rec {
+  name = "pg_repack-${version}";
+  version = "1.4.4";
+
+  buildInputs = [ postgresql openssl zlib readline ];
+
+  src = fetchFromGitHub {
+    owner  = "reorg";
+    repo   = "pg_repack";
+    rev    = "refs/tags/ver_${version}";
+    sha256 = "0ynsmsxfkcp82ccpz2nrgg8wiil8yxqigvw6425lx8v80h5lszbw";
+  };
+
+  installPhase = ''
+    install -D bin/pg_repack -t $out/bin/
+    install -D lib/pg_repack.so -t $out/lib/
+    install -D lib/{pg_repack--${version}.sql,pg_repack.control} -t $out/share/extension
+  '';
+
+  meta = with stdenv.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.
+    '';
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ danbst ];
+    inherit (postgresql.meta) platforms;
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pg_similarity/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pg_similarity/default.nix
new file mode 100644
index 000000000000..32945c9fa62b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pg_similarity/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, gcc, postgresql }:
+
+stdenv.mkDerivation {
+
+  name = "pg_similarity-1.0";
+  src = fetchFromGitHub {
+    owner = "eulerto";
+    repo = "pg_similarity";
+    rev = "be1a8b08c8716e59b89982557da9ea68cdf868c5";
+    sha256 = "1z4v4r2yccdr8kz3935fnk1bc5vj0qj0apscldyap4wxlyi89xim";
+  };
+
+  buildInputs = [ postgresql gcc ];
+  buildPhase = "USE_PGXS=1 make";
+  installPhase = ''
+    mkdir -p $out/bin   # for buildEnv to setup proper symlinks
+    install -D pg_similarity.so -t $out/lib/
+    install -D ./{pg_similarity--unpackaged--1.0.sql,pg_similarity--1.0.sql,pg_similarity.control} -t $out/share/extension
+  '';
+
+  meta = {
+    description = ''
+       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 = stdenv.lib.platforms.linux;
+    license = stdenv.lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ danbst ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pgjwt/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pgjwt/default.nix
new file mode 100644
index 000000000000..ab7ba8943a7b
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pgjwt/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, postgresql }:
+
+stdenv.mkDerivation rec {
+  name    = "pgjwt-${version}";
+  version = "unstable-2017-04-24";
+
+  src = fetchFromGitHub {
+    owner  = "michelp";
+    repo   = "pgjwt";
+    rev    = "546a2911027b716586e241be7fd4c6f1785237cd";
+    sha256 = "1riz0xvwb6y02j0fljbr9hcbqb2jqs4njlivmavy9ysbcrrv1vrf";
+  };
+
+  buildPhase = ":";
+  installPhase = ''
+    mkdir -p $out/bin  # current postgresql extension mechanism in nixos requires bin directory
+    mkdir -p $out/share/extension
+    cp pg*sql *.control $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "PostgreSQL implementation of JSON Web Tokens";
+    longDescription = ''
+      sign() and verify() functions to create and verify JSON Web Tokens.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [spinus];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pgroonga/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pgroonga/default.nix
new file mode 100644
index 000000000000..aca5eb1f4ee7
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pgroonga/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, postgresql, msgpack, groonga }:
+
+stdenv.mkDerivation rec {
+  name = "pgroonga-${version}";
+  version = "2.1.6";
+
+  src = fetchurl {
+    url = "https://packages.groonga.org/source/pgroonga/${name}.tar.gz";
+    sha256 = "1scybfmmlz5p4xgkhfx7pzdiqj5cd60kvbk8m4xa6k3avz0p1sw9";
+  };
+
+  nativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ postgresql msgpack groonga ];
+
+  makeFlags = [ "HAVE_MSGPACK=1" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D pgroonga.so -t $out/lib/
+    install -D ./{pgroonga-*.sql,pgroonga.control} -t $out/share/extension
+  '';
+
+  meta = with stdenv.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/;
+    license = licenses.postgresql;
+    maintainers = with maintainers; [ DerTim1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/pgtap/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/pgtap/default.nix
new file mode 100644
index 000000000000..6386049be395
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/pgtap/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchFromGitHub, postgresql, perl, perlPackages, which }:
+
+stdenv.mkDerivation rec {
+  name = "pgtap-${version}";
+  version = "0.99.0";
+
+  src = fetchFromGitHub {
+    owner = "theory";
+    repo = "pgtap";
+    rev = "v${version}";
+    sha256 = "0xakjlbb99mgd8za6m0xa6n3s5fhif217iip6b3aywqw7nh1j6nv";
+  };
+
+  nativeBuildInputs = [ postgresql perl perlPackages.TAPParserSourceHandlerpgTAP which ];
+
+  installPhase = ''
+    install -D {sql/pgtap--${version}.sql,pgtap.control} -t $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "pgTAP is 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/plv8/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/plv8/default.nix
new file mode 100644
index 000000000000..dae3b2fd1af1
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/plv8/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, fetchFromGitHub, v8, perl, postgresql }:
+
+stdenv.mkDerivation rec {
+  name = "plv8-${version}";
+  version = "2.3.8";
+
+  nativeBuildInputs = [ perl ];
+  buildInputs = [ v8 postgresql ];
+
+  src = fetchFromGitHub {
+    owner = "plv8";
+    repo = "plv8";
+    rev = "v${version}";
+    sha256 = "0hrmn1zzzdf52zwldg6axv57p0f3b279l9s8lbpijcv60fqrzx16";
+  };
+
+  makeFlags = [ "--makefile=Makefile.shared" ];
+
+  preConfigure = ''
+    patchShebangs ./generate_upgrade.sh
+  '';
+
+  buildPhase = "make -f Makefile.shared all";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D plv8*.so                                        -t $out/lib
+    install -D {plls,plcoffee,plv8}{--${version}.sql,.control} -t $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "PL/v8 - A Procedural Language in JavaScript powered by V8";
+    homepage = https://pgxn.org/dist/plv8/;
+    maintainers = with maintainers; [ volth ];
+    platforms = platforms.linux;
+    license = licenses.postgresql;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/psqlodbc/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/psqlodbc/default.nix
new file mode 100644
index 000000000000..2364e0913bc8
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/psqlodbc/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, fetchurl, libiodbc, postgresql, openssl }:
+
+stdenv.mkDerivation rec {
+  name = "psqlodbc-09.01.0200";
+
+  src = fetchurl {
+    url = "https://ftp.postgresql.org/pub/odbc/versions/src/${name}.tar.gz";
+    sha256 = "0b4w1ahfpp34jpscfk2kv9050lh3xl9pvcysqvaigkcd0vsk1hl9";
+  };
+
+  buildInputs = [ libiodbc postgresql openssl ];
+
+  configureFlags = [ "--with-iodbc=${libiodbc}" ];
+
+  meta = with stdenv.lib; {
+    homepage = http://psqlodbc.projects.postgresql.org/;
+    description = "ODBC driver for PostgreSQL";
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/specify_pkglibdir_at_runtime.patch b/nixpkgs/pkgs/servers/sql/postgresql/specify_pkglibdir_at_runtime.patch
new file mode 100644
index 000000000000..fe95d2ee99f0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/specify_pkglibdir_at_runtime.patch
@@ -0,0 +1,29 @@
+diff -ur postgresql-9.5.3-orig/src/port/path.c postgresql-9.5.3/src/port/path.c
+--- postgresql-9.5.3-orig/src/port/path.c	2016-05-09 22:50:23.000000000 +0200
++++ postgresql-9.5.3/src/port/path.c	2016-08-29 22:44:10.507377613 +0200
+@@ -714,7 +714,11 @@
+ void
+ get_lib_path(const char *my_exec_path, char *ret_path)
+ {
+-	make_relative_path(ret_path, LIBDIR, PGBINDIR, my_exec_path);
++	char const * const nix_pglibdir = getenv("NIX_PGLIBDIR");
++	if(nix_pglibdir == NULL)
++		make_relative_path(ret_path, LIBDIR, PGBINDIR, my_exec_path);
++	else
++		make_relative_path(ret_path, nix_pglibdir, PGBINDIR, my_exec_path);
+ }
+ 
+ /*
+@@ -723,7 +727,11 @@
+ void
+ get_pkglib_path(const char *my_exec_path, char *ret_path)
+ {
+-	make_relative_path(ret_path, PKGLIBDIR, PGBINDIR, my_exec_path);
++	char const * const nix_pglibdir = getenv("NIX_PGLIBDIR");
++	if(nix_pglibdir == NULL)
++		make_relative_path(ret_path, PKGLIBDIR, PGBINDIR, my_exec_path);
++	else
++		make_relative_path(ret_path, nix_pglibdir, PGBINDIR, my_exec_path);
+ }
+ 
+ /*
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/timescaledb/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/timescaledb/default.nix
new file mode 100644
index 000000000000..3c53054ba7de
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/timescaledb/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchFromGitHub, cmake, postgresql, openssl }:
+
+# # To enable on NixOS:
+# config.services.postgresql = {
+#   extraPlugins = [ pkgs.timescaledb ];
+#   extraConfig = "shared_preload_libraries = 'timescaledb'";
+# }
+
+stdenv.mkDerivation rec {
+  name = "timescaledb-${version}";
+  version = "1.0.0";
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ postgresql openssl ];
+
+  src = fetchFromGitHub {
+    owner  = "timescale";
+    repo   = "timescaledb";
+    rev    = "refs/tags/${version}";
+    sha256 = "1359jc0dw8q3f0iipqfadzs8lvri9qa5w59ziz00x1d09ppw2q40";
+  };
+
+  # 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.
+  patchPhase = ''
+    for x in CMakeLists.txt sql/CMakeLists.txt; do
+      substituteInPlace "$x" \
+        --replace 'DESTINATION "''${PG_SHAREDIR}/extension"' "DESTINATION \"$out/share/extension\""
+    done
+
+    for x in src/CMakeLists.txt src/loader/CMakeLists.txt; do
+      substituteInPlace "$x" \
+        --replace 'DESTINATION ''${PG_PKGLIBDIR}' "DESTINATION \"$out/lib\""
+    done
+  '';
+
+  postInstall = ''
+    # work around an annoying bug, by creating $out/bin, so buildEnv doesn't freak out later
+    # see https://github.com/NixOS/nixpkgs/issues/22653
+
+    mkdir -p $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Scales PostgreSQL for time-series data via automatic partitioning across time and space";
+    homepage    = https://www.timescale.com/;
+    maintainers = with maintainers; [ volth ];
+    platforms   = platforms.linux;
+    license     = licenses.asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/topn/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/topn/default.nix
new file mode 100644
index 000000000000..dae30aadabd0
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/topn/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, postgresql, protobufc }:
+
+stdenv.mkDerivation rec {
+  name = "pg_topn-${version}";
+  version = "2.2.0";
+
+  nativeBuildInputs = [ protobufc ];
+  buildInputs = [ postgresql ];
+
+  src = fetchFromGitHub {
+    owner  = "citusdata";
+    repo   = "postgresql-topn";
+    rev    = "refs/tags/v${version}";
+    sha256 = "1i5fn517mdvzfhlcj7fh4z0iniynanshcn7kzhsq19sgci0g31fr";
+  };
+
+  installPhase = ''
+    mkdir -p $out/{lib,share/extension}
+
+    cp *.so      $out/lib
+    cp *.sql     $out/share/extension
+    cp *.control $out/share/extension
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Efficient querying of 'top values' for PostgreSQL";
+    homepage    = https://www.citusdata.com/;
+    maintainers = with maintainers; [ thoughtpolice ];
+    platforms   = platforms.linux;
+    license     = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/servers/sql/postgresql/tsearch_extras/default.nix b/nixpkgs/pkgs/servers/sql/postgresql/tsearch_extras/default.nix
new file mode 100644
index 000000000000..b43a9c51be0c
--- /dev/null
+++ b/nixpkgs/pkgs/servers/sql/postgresql/tsearch_extras/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchFromGitHub, pkgconfig, postgresql }:
+
+stdenv.mkDerivation rec {
+  name = "tsearch-extras-${version}";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner  = "zulip";
+    repo   = "tsearch_extras";
+    rev    = "84e78f00931c4ef261d98197d6b5d94fc141f742"; # no release tag?
+    sha256 = "18j0saqblg3jhrz38splk173xjwdf32c67ymm18m8n5y94h8d2ba";
+  };
+
+  nativenativeBuildInputs = [ pkgconfig ];
+  buildInputs = [ postgresql ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -D tsearch_extras.so -t $out/lib/
+    install -D ./{tsearch_extras--1.0.sql,tsearch_extras.control} -t $out/share/extension
+  '';
+
+  meta = with stdenv.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;
+    maintainers = with maintainers; [ DerTim1 ];
+  };
+}