In base alla mia esperienza, pl/java presenta alcuni problemi importanti:
- È difficile installarlo in un server postgresql. Anche se trovi la build binaria per la tua versione postgresql (che è anche difficile), ha bisogno di un po' di configurazione e di giocoleria del percorso della libreria.
- La prima chiamata alla stored procedure java risulterà in un nuovo processo JVM. I processi JVM sono nell'ambito della connessione e richiedono una certa quantità di memoria per l'heap java, quindi se usi il pool di connessioni ti ritroverai con 10-20 JVM avviate e inutilizzate per la maggior parte del tempo, consumando la RAM del tuo server
- pl/java può comunicare con il database postgresql utilizzando un driver JDBC autocostruito che emula l'utilizzo JDBC comune, ma presenta alcuni problemi di implementazione che potrebbero sorprenderti. Soprattutto se vuoi usare i cursori JDBC o altre cose non così comuni.
- La registrazione pl/java è piuttosto speciale, a causa dell'implementazione della gestione degli errori interni di Postgresql. Ad esempio, se registri qualcosa con java logging api a livello di registro ERRORE, interromperà la connessione al server.
- pl/java ha prestazioni di elaborazione dati molto buone rispetto alla logica java basata su server di applicazioni, ma è totalmente non scalabile - le procedure pl/java sono completamente a thread singolo - postgresql vieta le procedure multi-thread
- Se utilizzi il driver JDBC interno e la tua istruzione SQL contiene errori, ti ritroverai con un messaggio di errore criptico nel log di postgresql, totalmente estraneo al problema reale.
Di conseguenza, puoi utilizzare le procedure pl/java con un certo successo, ma devi farlo con molta attenzione e probabilmente devi pensare a migliorare il design della tua applicazione.