Merge #17838: postgresql: Fix use with extensions

Changed files
+63 -1
nixos
modules
services
databases
tests
pkgs
+3 -1
nixos/modules/services/databases/postgresql.nix
···
if cfg.extraPlugins == [] then pg
else pkgs.buildEnv {
name = "postgresql-and-plugins-${(builtins.parseDrvName pg.name).version}";
-
paths = [ pg ] ++ cfg.extraPlugins;
postBuild =
''
mkdir -p $out/bin
rm $out/bin/{pg_config,postgres,pg_ctl}
cp --target-directory=$out/bin ${pg}/bin/{postgres,pg_config,pg_ctl}
'';
};
···
if cfg.extraPlugins == [] then pg
else pkgs.buildEnv {
name = "postgresql-and-plugins-${(builtins.parseDrvName pg.name).version}";
+
paths = [ pg pg.lib ] ++ cfg.extraPlugins;
+
buildInputs = [ pkgs.makeWrapper ];
postBuild =
''
mkdir -p $out/bin
rm $out/bin/{pg_config,postgres,pg_ctl}
cp --target-directory=$out/bin ${pg}/bin/{postgres,pg_config,pg_ctl}
+
wrapProgram $out/bin/postgres --set NIX_PGLIBDIR $out/lib
'';
};
+30
nixos/tests/postgis.nix
···
···
+
import ./make-test.nix ({ pkgs, ...} : {
+
name = "postgis";
+
meta = with pkgs.stdenv.lib.maintainers; {
+
maintainers = [ lsix ];
+
};
+
+
nodes = {
+
master =
+
{ pkgs, config, ... }:
+
+
{
+
services.postgresql = let mypg = pkgs.postgresql95; in {
+
enable = true;
+
package = mypg;
+
extraPlugins = [ (pkgs.postgis.override { postgresql = mypg; }).v_2_2_1 ];
+
initialScript = pkgs.writeText "postgresql-init.sql"
+
''
+
CREATE ROLE postgres WITH superuser login createdb;
+
'';
+
};
+
};
+
};
+
+
testScript = ''
+
startAll;
+
$master->waitForUnit("postgresql");
+
$master->sleep(10); # Hopefully this is long enough!!
+
$master->succeed("sudo -u postgres psql -c 'CREATE EXTENSION postgis;'");
+
'';
+
})
+1
pkgs/servers/sql/postgresql/default.nix
···
[ (if lib.versionAtLeast version "9.4" then ./disable-resolve_symlinks-94.patch else ./disable-resolve_symlinks.patch)
./less-is-more.patch
./hardcode-pgxs-path.patch
];
installTargets = [ "install-world" ];
···
[ (if lib.versionAtLeast version "9.4" then ./disable-resolve_symlinks-94.patch else ./disable-resolve_symlinks.patch)
./less-is-more.patch
./hardcode-pgxs-path.patch
+
./specify_pkglibdir_at_runtime.patch
];
installTargets = [ "install-world" ];
+29
pkgs/servers/sql/postgresql/specify_pkglibdir_at_runtime.patch
···
···
+
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);
+
}
+
+
/*