至于我的expirience pl / java有一些主要问题:
- 很难将其安装到postgresql服务器中。即使您发现postgresql版本的二进制版本(这也很难) - 它需要一些配置和库路径杂耍。
- 首先调用java存储过程将导致新的JVM进程。 JVM进程是连接范围的,并且需要一定量的内存用于Java堆,因此如果使用连接池,最终会有大量时间启动和未使用的10-20个JVM,消耗服务器RAM
- pl / java可以使用自制的JDBC驱动程序与postgresql数据库进行通信,该驱动程序模拟常见的JDBC使用情况,但是有些实现问题可能让您大吃一惊。特别是如果你想使用JDBC cusrors或其他不那么常见的东西。
- pl / java logging非常特别 - 因为postgresql内部错误处理实现。例如 - 如果您在ERROR日志级别使用java logging api记录某些内容 - 它将终止您的服务器连接。
- 与基于应用程序服务器的java逻辑相比,pl / java具有非常好的数据处理性能,但它完全不可扩展 - pl / java程序完全是单线程的 - postgresql禁止多线程程序
- 如果您使用内部JDBC驱动程序并且您的SQL语句包含错误 - 您将在postgresql日志中收到神秘的错误消息 - 与真正的问题完全无关。
醇>
结果 - 您可以使用pl / java程序取得一些成功,但是您需要非常小心地完成它,并且您可能需要考虑改进应用程序设计。
通常唯一的主要区别在于往返。如果您的Java代码与数据库具有低延迟连接,您应该发现客户端逻辑可以很好地执行。
更新:Ian说你的意思是PL / Java,即数据库内执行。如果这就是你的意思,我会不推荐PL / Java。它几乎没有维护;此外,Java模型(线程繁重,昂贵的大型启动)并不是PostgreSQL的最佳匹配(进程不是线程,非常轻量级的启动)。
让人们将工作交给PL / Java会很棒,但现在还没有发生太多事情。