supabase-postgres.git / summary / log / commit / refs
commit 429d89a8bba2f26f073655a867c6ae0240750d92
Author: samrose <samuel.rose@gmail.com>
Commit: GitHub <noreply@github.com>
Date: Tue May 21 14:58:30 2024 +0000
Sam/pljava nix (#976)
* feat: package pljava
* feat: pljava psql nix package
* feat: package and smoke test pljava extension into the bundle
run on openjdk11
* chore: cleanup nix expression
.gitignore | 5 +++++
flake.nix | 9 ++++++--
nix/ext/pljava.nix | 51 ++++++++++++++++++++++++++++++++++++++++++++
nix/tests/postgresql.conf.in | 1 +
nix/tests/prime.sql | 1 +
nix/tools/run-server.sh.in | 8 ++++---
6 files changed, 70 insertions(+), 5 deletions(-)
diff --git a/.gitignore b/.gitignore
index 4ee250e0..a6950d2f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,8 @@ __pycache__/
result*
.env-local
.history
+
+
+#IDE
+.idea/
+.vscode/
diff --git a/flake.nix b/flake.nix
index db235252..e83ffab1 100644
--- a/flake.nix
+++ b/flake.nix
@@ -128,6 +128,7 @@
./nix/ext/wrappers/default.nix
./nix/ext/supautils.nix
./nix/ext/plv8.nix
+ ./nix/ext/pljava.nix
];
#Where we import and build the orioledb extension, we add on our custom extensions
@@ -412,7 +413,8 @@
--subst-var-by 'PGSQL_SUPERUSER' '${pgsqlSuperuser}' \
--subst-var-by 'PSQL15_BINDIR' '${basePackages.psql_15.bin}' \
--subst-var-by 'PSQL_CONF_FILE' '${configFile}' \
- --subst-var-by 'PGSODIUM_GETKEY' '${getkeyScript}'
+ --subst-var-by 'PGSODIUM_GETKEY' '${getkeyScript}' \
+ --subst-var-by 'LIBJVM_LOCATION' '${pkgs.openjdk11}/lib/openjdk/lib/server/libjvm.so'
chmod +x $out/bin/start-postgres-server
'';
@@ -475,13 +477,16 @@
pkgs.runCommand "postgres-${pgpkg.version}-check-harness"
{
nativeBuildInputs = with pkgs; [ coreutils bash pgpkg pg_prove procps ];
+ propagatedBuildInputs = with pkgs; [ openjdk11 ];
} ''
export PGDATA=/tmp/pgdata
mkdir -p $PGDATA
initdb --locale=C
substitute ${./nix/tests/postgresql.conf.in} $PGDATA/postgresql.conf \
- --subst-var-by PGSODIUM_GETKEY_SCRIPT "${./nix/tests/util/pgsodium_getkey.sh}"
+ --subst-var-by PGSODIUM_GETKEY_SCRIPT "${./nix/tests/util/pgsodium_getkey.sh}" \
+ --subst-var-by PLJAVA_LIBJVM_LOCATION "${pkgs.openjdk11}/lib/openjdk/lib/server/libjvm.so"
+
postgres -k /tmp >logfile 2>&1 &
sleep 2
diff --git a/nix/ext/pljava.nix b/nix/ext/pljava.nix
new file mode 100644
index 00000000..16f8a59c
--- /dev/null
+++ b/nix/ext/pljava.nix
@@ -0,0 +1,51 @@
+{ stdenv, lib, fetchFromGitHub, openssl, openjdk, maven, postgresql, libkrb5, makeWrapper, gcc, pkg-config, which }:
+
+maven.buildMavenPackage rec {
+ pname = "pljava";
+
+ version = "1.6.7";
+
+ src = fetchFromGitHub {
+ owner = "tada";
+ repo = "pljava";
+ rev = "V1_6_7";
+ sha256 = "sha256-M17adSLsw47KZ2BoUwxyWkXKRD8TcexDAy61Yfw4fNU=";
+
+ };
+
+ mvnParameters = "clean install -Dmaven.test.skip -DskipTests -Dmaven.javadoc.skip=true";
+ mvnHash = "sha256-lcxRduh/nKcPL6YQIVTsNH0L4ga0LgJpQKgX5IPkRzs=";
+
+ nativeBuildInputs = [ makeWrapper maven openjdk postgresql openssl postgresql gcc libkrb5 pkg-config ];
+ buildInputs = [ stdenv.cc.cc.lib which];
+ buildPhase = ''
+ export PATH=$(lib.makeBinPath [ postgresql ]):$PATH
+
+ '';
+ buildOffline = true;
+
+ installPhase = ''
+ mkdir -p $out/pljavabuild
+ cp -r * $out/pljavabuild
+ mkdir -p $out/share/postgresql/extension/pljava
+ mkdir -p $out/share/postgresql/pljava
+ mkdir -p $out/lib
+ mkdir -p $out/etc
+ java -Dpgconfig=${postgresql}/bin/pg_config \
+ -Dpgconfig.sharedir=$out/share \
+ -Dpgconfig.sysconfdir=$out/etc/pljava.policy \
+ -Dpgconfig.pkglibdir=$out/lib \
+ -jar $out/pljavabuild/pljava-packaging/target/pljava-pg15.jar
+ cp $out/share/pljava/* $out/share/postgresql/extension/pljava
+ cp $out/share/pljava/* $out/share/postgresql/pljava
+ cp $out/share/extension/*.control $out/share/postgresql/extension
+ rm -r $out/pljavabuild
+ '';
+
+ meta = with lib; {
+ description = "PL/Java extension for PostgreSQL";
+ homepage = https://github.com/tada/pljava;
+ license = licenses.bsd3;
+ maintainers = [ maintainers.samrose ]; # Update with actual maintainer info
+ };
+}
diff --git a/nix/tests/postgresql.conf.in b/nix/tests/postgresql.conf.in
index 4c5075aa..22d1b93f 100644
--- a/nix/tests/postgresql.conf.in
+++ b/nix/tests/postgresql.conf.in
@@ -793,3 +793,4 @@ shared_preload_libraries = 'auto_explain,pgsodium'
# Add settings for extensions here
pgsodium.getkey_script = '@PGSODIUM_GETKEY_SCRIPT@'
+pljava.libjvm_location = '@PLJAVA_LIBJVM_LOCATION@'
diff --git a/nix/tests/prime.sql b/nix/tests/prime.sql
index 084ad3b5..5a0e88f5 100644
--- a/nix/tests/prime.sql
+++ b/nix/tests/prime.sql
@@ -20,3 +20,4 @@ CREATE EXTENSION IF NOT EXISTS pg_graphql;
CREATE EXTENSION IF NOT EXISTS pg_jsonschema;
CREATE EXTENSION IF NOT EXISTS hypopg;
CREATE EXTENSION IF NOT EXISTS index_advisor;
+CREATE EXTENSION IF NOT EXISTS pljava;
diff --git a/nix/tools/run-server.sh.in b/nix/tools/run-server.sh.in
index c5b6eb04..b620a0f1 100644
--- a/nix/tools/run-server.sh.in
+++ b/nix/tools/run-server.sh.in
@@ -27,6 +27,7 @@ PGSQL_SUPERUSER=@PGSQL_SUPERUSER@
PSQL_CONF_FILE=@PSQL_CONF_FILE@
PGSODIUM_GETKEY_SCRIPT=@PGSODIUM_GETKEY@
PORTNO="${2:-@PGSQL_DEFAULT_PORT@}"
+PLJAVA_LIBJVM_LOCATION=@LIBJVM_LOCATION@
DATDIR=$(mktemp -d)
mkdir -p "$DATDIR"
@@ -38,8 +39,9 @@ echo
initdb -U "$PGSQL_SUPERUSER" -D "$DATDIR" --locale=C
echo "NOTE: patching postgresql.conf files"
-sed \
- "s#@PGSODIUM_GETKEY_SCRIPT@#$PGSODIUM_GETKEY_SCRIPT#g" \
- $PSQL_CONF_FILE > "$DATDIR/postgresql.conf"
+echo "pljava libjvm location: $PLJAVA_LIBJVM_LOCATION"
+sed -e "s#@PGSODIUM_GETKEY_SCRIPT@#$PGSODIUM_GETKEY_SCRIPT#g" \
+ -e "s#@PLJAVA_LIBJVM_LOCATION@#$PLJAVA_LIBJVM_LOCATION#g" \
+ $PSQL_CONF_FILE > "$DATDIR/postgresql.conf"
exec postgres -p "$PORTNO" -D "$DATDIR" -k /tmp
[parent: 64db8d6519d9]