Od mojego doświadczenia pl/java ma kilka poważnych problemów:
- Trudno jest zainstalować go na serwerze postgresql. Nawet jeśli znajdziesz kompilację binarną dla swojej wersji postgresql (co też jest trudne) - wymaga trochę żonglowania konfiguracją i ścieżką biblioteki.
- Pierwsze wywołanie procedury składowanej Java spowoduje utworzenie nowego procesu JVM. Procesy JVM są ograniczone do połączeń i wymagają pewnej ilości pamięci dla sterty Java, więc jeśli użyjesz puli połączeń, skończysz z 10-20 uruchomionymi i nieużywanymi maszynami JVM, zużywając pamięć RAM serwera
- pl/java może komunikować się z bazą danych postgresql za pomocą samodzielnie stworzonego sterownika JDBC, który emuluje typowe użycie JDBC, ale ma pewne problemy z implementacją, które mogą Cię zaskoczyć. Zwłaszcza jeśli chcesz używać kursorów JDBC lub innych nie tak powszechnych rzeczy.
- Logowanie pl/java jest dość szczególne - wynika to z implementacji obsługi błędów wewnętrznych postgresql. Na przykład - jeśli zalogujesz coś za pomocą interfejsu API rejestrowania java na poziomie dziennika ERROR - zakończy to połączenie z serwerem.
- pl/java ma bardzo dobrą wydajność przetwarzania danych w porównaniu z logiką java opartą na serwerze aplikacji, ale jest całkowicie nieskalowalna - procedury pl/java są w pełni jednowątkowe - postgresql zabrania procedur wielowątkowych
- Jeśli używasz wewnętrznego sterownika JDBC, a instrukcja SQL zawiera błędy - otrzymasz tajemniczy komunikat o błędzie w dzienniku postgresql - całkowicie niezwiązany z prawdziwym problemem.
W rezultacie - możesz używać procedur pl/java z pewnym powodzeniem, ale musisz to robić bardzo ostrożnie i prawdopodobnie musisz pomyśleć o ulepszeniu projektu swojej aplikacji.