pljava

pljava : PL/Java procedural language

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
3090
pljava
pljava
1.6.10
LANG
BSD 3-Clause
Java
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s-d--
No
Yes
No
Yes
no
no
Relationships
Schemassqlj
See Also
plpgsql
plv8
plperl
plpython3u
pg_tle
pllua
plluau
pltclu

missing debian/ubuntu pg18

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PGDG
1.6.10
18
17
16
15
14
pljava-
RPM
PGDG
1.6.10
18
17
16
15
14
pljava_$v-
DEB
PGDG
1.6.9
18
17
16
15
14
postgresql-$v-pljava-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
el8.aarch64
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
el9.x86_64
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
el9.aarch64
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
el10.x86_64
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
el10.aarch64
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
PGDG 1.6.10
d12.x86_64
MISS
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
d12.aarch64
MISS
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
d13.x86_64
MISS
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
d13.aarch64
MISS
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
u22.x86_64
MISS
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
u22.aarch64
MISS
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
u24.x86_64
MISS
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
u24.aarch64
MISS
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
PGDG 1.6.9
PackageVersionOSORGSIZEFile URL
pljava_171.6.10el8.x86_64pgdg927.5 KiBpljava_17-1.6.10-1PGDG.rhel8.x86_64.rpm
pljava_171.6.8el8.x86_64pgdg914.1 KiBpljava_17-1.6.8-1PGDG.rhel8.x86_64.rpm
pljava_171.6.10el8.aarch64pgdg923.4 KiBpljava_17-1.6.10-1PGDG.rhel8.aarch64.rpm
pljava_171.6.8el8.aarch64pgdg910.0 KiBpljava_17-1.6.8-1PGDG.rhel8.aarch64.rpm
pljava_171.6.10el9.x86_64pgdg917.4 KiBpljava_17-1.6.10-1PGDG.rhel9.x86_64.rpm
pljava_171.6.8el9.x86_64pgdg895.2 KiBpljava_17-1.6.8-1PGDG.rhel9.x86_64.rpm
pljava_171.6.10el9.aarch64pgdg914.4 KiBpljava_17-1.6.10-1PGDG.rhel9.aarch64.rpm
pljava_171.6.8el9.aarch64pgdg892.1 KiBpljava_17-1.6.8-1PGDG.rhel9.aarch64.rpm
pljava_171.6.10el10.x86_64pgdg918.2 KiBpljava_17-1.6.10-1PGDG.rhel10.x86_64.rpm
pljava_171.6.9el10.x86_64pgdg914.5 KiBpljava_17-1.6.9-1PGDG.rhel10.x86_64.rpm
pljava_171.6.10el10.aarch64pgdg914.6 KiBpljava_17-1.6.10-1PGDG.rhel10.aarch64.rpm
pljava_171.6.9el10.aarch64pgdg911.1 KiBpljava_17-1.6.9-1PGDG.rhel10.aarch64.rpm
postgresql-17-pljava1.6.9d12.x86_64pgdg911.3 KiBpostgresql-17-pljava_1.6.9-1.pgdg120+1_amd64.deb
postgresql-17-pljava1.6.9d12.aarch64pgdg906.1 KiBpostgresql-17-pljava_1.6.9-1.pgdg120+1_arm64.deb
postgresql-17-pljava1.6.9d13.x86_64pgdg911.5 KiBpostgresql-17-pljava_1.6.9-1.pgdg130+1_amd64.deb
postgresql-17-pljava1.6.9d13.aarch64pgdg906.2 KiBpostgresql-17-pljava_1.6.9-1.pgdg130+1_arm64.deb
postgresql-17-pljava1.6.9u22.x86_64pgdg901.7 KiBpostgresql-17-pljava_1.6.9-1.pgdg22.04+1_amd64.deb
postgresql-17-pljava1.6.9u22.aarch64pgdg897.4 KiBpostgresql-17-pljava_1.6.9-1.pgdg22.04+1_arm64.deb
postgresql-17-pljava1.6.9u24.x86_64pgdg908.5 KiBpostgresql-17-pljava_1.6.9-1.pgdg24.04+1_amd64.deb
postgresql-17-pljava1.6.9u24.aarch64pgdg904.7 KiBpostgresql-17-pljava_1.6.9-1.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
pljava_161.6.10el8.x86_64pgdg927.8 KiBpljava_16-1.6.10-1PGDG.rhel8.x86_64.rpm
pljava_161.6.8el8.x86_64pgdg913.9 KiBpljava_16-1.6.8-1PGDG.rhel8.x86_64.rpm
pljava_161.6.10el8.aarch64pgdg923.7 KiBpljava_16-1.6.10-1PGDG.rhel8.aarch64.rpm
pljava_161.6.8el8.aarch64pgdg910.1 KiBpljava_16-1.6.8-1PGDG.rhel8.aarch64.rpm
pljava_161.6.10el9.x86_64pgdg917.4 KiBpljava_16-1.6.10-1PGDG.rhel9.x86_64.rpm
pljava_161.6.8el9.x86_64pgdg895.1 KiBpljava_16-1.6.8-1PGDG.rhel9.x86_64.rpm
pljava_161.6.6el9.x86_64pgdg891.8 KiBpljava_16-1.6.6-1PGDG.rhel9.x86_64.rpm
pljava_161.6.10el9.aarch64pgdg914.3 KiBpljava_16-1.6.10-1PGDG.rhel9.aarch64.rpm
pljava_161.6.8el9.aarch64pgdg892.1 KiBpljava_16-1.6.8-1PGDG.rhel9.aarch64.rpm
pljava_161.6.6el9.aarch64pgdg888.2 KiBpljava_16-1.6.6-1PGDG.rhel9.aarch64.rpm
pljava_161.6.10el10.x86_64pgdg918.3 KiBpljava_16-1.6.10-1PGDG.rhel10.x86_64.rpm
pljava_161.6.9el10.x86_64pgdg914.7 KiBpljava_16-1.6.9-1PGDG.rhel10.x86_64.rpm
pljava_161.6.10el10.aarch64pgdg914.9 KiBpljava_16-1.6.10-1PGDG.rhel10.aarch64.rpm
pljava_161.6.9el10.aarch64pgdg911.3 KiBpljava_16-1.6.9-1PGDG.rhel10.aarch64.rpm
postgresql-16-pljava1.6.9d12.x86_64pgdg911.5 KiBpostgresql-16-pljava_1.6.9-1.pgdg120+1_amd64.deb
postgresql-16-pljava1.6.9d12.aarch64pgdg906.3 KiBpostgresql-16-pljava_1.6.9-1.pgdg120+1_arm64.deb
postgresql-16-pljava1.6.9d13.x86_64pgdg911.5 KiBpostgresql-16-pljava_1.6.9-1.pgdg130+1_amd64.deb
postgresql-16-pljava1.6.9d13.aarch64pgdg906.1 KiBpostgresql-16-pljava_1.6.9-1.pgdg130+1_arm64.deb
postgresql-16-pljava1.6.9u22.x86_64pgdg901.5 KiBpostgresql-16-pljava_1.6.9-1.pgdg22.04+1_amd64.deb
postgresql-16-pljava1.6.9u22.aarch64pgdg897.7 KiBpostgresql-16-pljava_1.6.9-1.pgdg22.04+1_arm64.deb
postgresql-16-pljava1.6.9u24.x86_64pgdg908.5 KiBpostgresql-16-pljava_1.6.9-1.pgdg24.04+1_amd64.deb
postgresql-16-pljava1.6.9u24.aarch64pgdg904.8 KiBpostgresql-16-pljava_1.6.9-1.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
pljava_151.6.10el8.x86_64pgdg927.5 KiBpljava_15-1.6.10-1PGDG.rhel8.x86_64.rpm
pljava_151.6.8el8.x86_64pgdg914.1 KiBpljava_15-1.6.8-1PGDG.rhel8.x86_64.rpm
pljava_151.6.10el8.aarch64pgdg923.5 KiBpljava_15-1.6.10-1PGDG.rhel8.aarch64.rpm
pljava_151.6.8el8.aarch64pgdg909.9 KiBpljava_15-1.6.8-1PGDG.rhel8.aarch64.rpm
pljava_151.6.10el9.x86_64pgdg917.4 KiBpljava_15-1.6.10-1PGDG.rhel9.x86_64.rpm
pljava_151.6.8el9.x86_64pgdg895.6 KiBpljava_15-1.6.8-1PGDG.rhel9.x86_64.rpm
pljava_151.6.6el9.x86_64pgdg891.5 KiBpljava_15-1.6.6-1PGDG.rhel9.x86_64.rpm
pljava_151.6.10el9.aarch64pgdg914.3 KiBpljava_15-1.6.10-1PGDG.rhel9.aarch64.rpm
pljava_151.6.8el9.aarch64pgdg892.0 KiBpljava_15-1.6.8-1PGDG.rhel9.aarch64.rpm
pljava_151.6.6el9.aarch64pgdg887.6 KiBpljava_15-1.6.6-1PGDG.rhel9.aarch64.rpm
pljava_151.6.10el10.x86_64pgdg917.9 KiBpljava_15-1.6.10-1PGDG.rhel10.x86_64.rpm
pljava_151.6.9el10.x86_64pgdg914.6 KiBpljava_15-1.6.9-1PGDG.rhel10.x86_64.rpm
pljava_151.6.10el10.aarch64pgdg914.6 KiBpljava_15-1.6.10-1PGDG.rhel10.aarch64.rpm
pljava_151.6.9el10.aarch64pgdg911.3 KiBpljava_15-1.6.9-1PGDG.rhel10.aarch64.rpm
postgresql-15-pljava1.6.9d12.x86_64pgdg911.5 KiBpostgresql-15-pljava_1.6.9-1.pgdg120+1_amd64.deb
postgresql-15-pljava1.6.9d12.aarch64pgdg906.0 KiBpostgresql-15-pljava_1.6.9-1.pgdg120+1_arm64.deb
postgresql-15-pljava1.6.9d13.x86_64pgdg911.5 KiBpostgresql-15-pljava_1.6.9-1.pgdg130+1_amd64.deb
postgresql-15-pljava1.6.9d13.aarch64pgdg905.9 KiBpostgresql-15-pljava_1.6.9-1.pgdg130+1_arm64.deb
postgresql-15-pljava1.6.9u22.x86_64pgdg901.9 KiBpostgresql-15-pljava_1.6.9-1.pgdg22.04+1_amd64.deb
postgresql-15-pljava1.6.9u22.aarch64pgdg897.4 KiBpostgresql-15-pljava_1.6.9-1.pgdg22.04+1_arm64.deb
postgresql-15-pljava1.6.9u24.x86_64pgdg908.2 KiBpostgresql-15-pljava_1.6.9-1.pgdg24.04+1_amd64.deb
postgresql-15-pljava1.6.9u24.aarch64pgdg904.8 KiBpostgresql-15-pljava_1.6.9-1.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
pljava_141.6.10el8.x86_64pgdg927.6 KiBpljava_14-1.6.10-1PGDG.rhel8.x86_64.rpm
pljava_141.6.8el8.x86_64pgdg914.2 KiBpljava_14-1.6.8-1PGDG.rhel8.x86_64.rpm
pljava_141.6.10el8.aarch64pgdg923.4 KiBpljava_14-1.6.10-1PGDG.rhel8.aarch64.rpm
pljava_141.6.8el8.aarch64pgdg910.0 KiBpljava_14-1.6.8-1PGDG.rhel8.aarch64.rpm
pljava_141.6.10el9.x86_64pgdg917.3 KiBpljava_14-1.6.10-1PGDG.rhel9.x86_64.rpm
pljava_141.6.8el9.x86_64pgdg895.1 KiBpljava_14-1.6.8-1PGDG.rhel9.x86_64.rpm
pljava_141.6.6el9.x86_64pgdg891.4 KiBpljava_14-1.6.6-1PGDG.rhel9.x86_64.rpm
pljava_141.6.10el9.aarch64pgdg914.2 KiBpljava_14-1.6.10-1PGDG.rhel9.aarch64.rpm
pljava_141.6.8el9.aarch64pgdg892.3 KiBpljava_14-1.6.8-1PGDG.rhel9.aarch64.rpm
pljava_141.6.6el9.aarch64pgdg887.8 KiBpljava_14-1.6.6-1PGDG.rhel9.aarch64.rpm
pljava_141.6.10el10.x86_64pgdg917.9 KiBpljava_14-1.6.10-1PGDG.rhel10.x86_64.rpm
pljava_141.6.9el10.x86_64pgdg914.5 KiBpljava_14-1.6.9-1PGDG.rhel10.x86_64.rpm
pljava_141.6.10el10.aarch64pgdg914.7 KiBpljava_14-1.6.10-1PGDG.rhel10.aarch64.rpm
pljava_141.6.9el10.aarch64pgdg911.4 KiBpljava_14-1.6.9-1PGDG.rhel10.aarch64.rpm
postgresql-14-pljava1.6.9d12.x86_64pgdg910.7 KiBpostgresql-14-pljava_1.6.9-1.pgdg120+1_amd64.deb
postgresql-14-pljava1.6.9d12.aarch64pgdg906.8 KiBpostgresql-14-pljava_1.6.9-1.pgdg120+1_arm64.deb
postgresql-14-pljava1.6.9d13.x86_64pgdg910.9 KiBpostgresql-14-pljava_1.6.9-1.pgdg130+1_amd64.deb
postgresql-14-pljava1.6.9d13.aarch64pgdg906.5 KiBpostgresql-14-pljava_1.6.9-1.pgdg130+1_arm64.deb
postgresql-14-pljava1.6.9u22.x86_64pgdg901.7 KiBpostgresql-14-pljava_1.6.9-1.pgdg22.04+1_amd64.deb
postgresql-14-pljava1.6.9u22.aarch64pgdg897.2 KiBpostgresql-14-pljava_1.6.9-1.pgdg22.04+1_arm64.deb
postgresql-14-pljava1.6.9u24.x86_64pgdg908.1 KiBpostgresql-14-pljava_1.6.9-1.pgdg24.04+1_amd64.deb
postgresql-14-pljava1.6.9u24.aarch64pgdg904.6 KiBpostgresql-14-pljava_1.6.9-1.pgdg24.04+1_arm64.deb

Source

Install

Make sure PGDG repo available:

pig repo add pgdg -u    # add pgdg repo and update cache

Install this extension with pig:

pig install pljava;		# install via package name, for the active PG version

pig install pljava -v 18;   # install for PG 18
pig install pljava -v 17;   # install for PG 17
pig install pljava -v 16;   # install for PG 16
pig install pljava -v 15;   # install for PG 15
pig install pljava -v 14;   # install for PG 14

Create this extension with:

CREATE EXTENSION pljava;

Usage

pljava: PL/Java procedural language

pljava enables writing PostgreSQL functions, triggers, and types in Java using the standard JDBC API.

CREATE EXTENSION pljava;

Deploy Java Code

Package your Java classes in a JAR file with an SQLJ deployment descriptor, then install it:

SELECT sqlj.install_jar('file:///path/to/my_functions.jar', 'myjar', true);
SELECT sqlj.set_classpath('public', 'myjar');

Create Functions

Write a Java class with static methods:

package com.example;

import org.postgresql.pljava.annotation.Function;

public class MyFunctions {
    @Function
    public static int add(int a, int b) {
        return a + b;
    }

    @Function
    public static String hello(String name) {
        return "Hello, " + name + "!";
    }
}

Declare the SQL function mapping:

CREATE FUNCTION add(int, int) RETURNS int
  AS 'com.example.MyFunctions.add'
  LANGUAGE java;

CREATE FUNCTION hello(varchar) RETURNS varchar
  AS 'com.example.MyFunctions.hello'
  LANGUAGE java;

Set-Returning Functions

Implement ResultSetProvider for set-returning functions:

import org.postgresql.pljava.ResultSetProvider;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MySetFunction implements ResultSetProvider {
    public boolean assignRowValues(ResultSet receiver, int currentRow)
            throws SQLException {
        if (currentRow < 10) {
            receiver.updateInt(1, currentRow);
            receiver.updateString(2, "row " + currentRow);
            return true;
        }
        return false;
    }

    public void close() {}

    public static ResultSetProvider generate()
            throws SQLException {
        return new MySetFunction();
    }
}

Trigger Functions

import org.postgresql.pljava.TriggerData;
import org.postgresql.pljava.annotation.Trigger;

public class MyTrigger {
    @Trigger(called = Trigger.Called.BEFORE, table = "my_table",
             events = {Trigger.Event.INSERT, Trigger.Event.UPDATE})
    public static void auditTrigger(TriggerData td) throws SQLException {
        ResultSet newRow = td.getNew();
        newRow.updateTimestamp("modified_at",
            new java.sql.Timestamp(System.currentTimeMillis()));
    }
}

Database Access via JDBC

import java.sql.*;

public static int countUsers() throws SQLException {
    Connection conn = DriverManager.getConnection("jdbc:default:connection");
    PreparedStatement stmt = conn.prepareStatement("SELECT count(*) FROM users");
    ResultSet rs = stmt.executeQuery();
    rs.next();
    return rs.getInt(1);
}

JAR Management

SELECT sqlj.install_jar('file:///path/to/jar', 'jarname', true);
SELECT sqlj.replace_jar('file:///path/to/new.jar', 'jarname', true);
SELECT sqlj.remove_jar('jarname', true);
SELECT sqlj.set_classpath('schemaname', 'jar1:jar2');
SELECT sqlj.get_classpath('schemaname');
Last updated on