Från och med min erfarenhet har pl/java några stora problem:
- Det är svårt att installera det på en postgresql-server. Även om du hittar binär build för din postgresql-version (vilket också är svårt) - det behöver lite konfiguration och biblioteksväg jonglering.
- Första anropet till den lagrade Java-proceduren kommer att resultera i en ny JVM-process. JVM-processer är anslutningsomfattade och kräver en viss mängd minne för java-högen, så om du använder anslutningspool kommer du att sluta med 10-20 JVM:er startade och oanvända för det mesta, vilket förbrukar serverns RAM-minne
- pl/java kan kommunicera med postgresql-databasen med hjälp av egentillverkad JDBC-drivrutin som emulerar vanlig JDBC-användning, men har några implementeringsproblem som kan överraska dig. Speciellt om du vill använda JDBC-visare eller andra inte så vanliga saker.
- pl/java-loggning är ganska speciell - det är på grund av postgresql intern felhanteringsimplementering. Till exempel - om du loggar något med Java-loggnings-API på ERROR-loggnivå - kommer det att avsluta din serveranslutning.
- pl/java har mycket bra databehandlingsprestanda jämfört med applikationsserverbaserad java-logik, men det är helt omöjligt - pl/java-procedurer är helt enkeltrådade - postgresql förbjuder flertrådiga procedurer
- Om du använder intern JDBC-drivrutin och din SQL-sats innehåller fel - kommer du att få ett kryptiskt felmeddelande i postgresql-loggen - helt orelaterade till det verkliga problemet.
Som ett resultat - du kan använda pl/java-procedurer med viss framgång, men du måste göra det mycket noggrant och förmodligen måste du tänka på att förbättra din applikationsdesign.