Postgres pl/java 警告

Doj*_*ojo 1 postgresql plpgsql pljava

我非常喜欢用 Java 编写数据库端代码,但想知道这样做与 pl/pgsql 相比是否有任何缺点(特别是与性能和错误处理相关的)。

Kon*_*hov 5

根据我的经验,pl/java 有一些主要问题:

  1. 将它安装到 postgresql 服务器中很困难。即使您找到适合您的 postgresql 版本的二进制构建(这也很困难) - 它需要一些配置和库路径杂耍。
  2. 第一次调用 java 存储过程将产生一个新的 JVM 进程。JVM 进程是连接范围的,需要一定量的 Java 堆内存,因此,如果您使用连接池,您最终会启动 10-20 个 JVM,但大部分时间都未使用,从而消耗服务器 RAM
  3. pl/java 可以使用自制的 JDBC 驱动程序与 postgresql 数据库通信,该驱动程序模拟常见的 JDBC 用法,但有一些实现问题可能会让您感到惊讶。特别是如果您想使用 JDBC 客户端或其他不常见的东西。
  4. pl/java 日志记录相当特殊 - 这是因为 postgresql 内部错误处理实现。例如 - 如果您使用 javalogging api 在 ERROR 日志级别记录某些内容 - 它将终止您的服务器连接。
  5. 与基于应用程序服务器的 java 逻辑相比,pl/java 具有非常好的数据处理性能,但它完全不可扩展 - pl/java 程序完全是单线程的 - postgresql 禁止多线程程序
  6. 如果您使用内部 JDBC 驱动程序并且您的 SQL 语句包含错误 - 您最终会在 postgresql 日志中看到神秘的错误消息 - 与实际问题完全无关。

结果 - 您可以使用 pl/java 过程取得一些成功,但您需要非常小心地进行操作,并且可能需要考虑改进您的应用程序设计。

  • 实际上,您可以使用多线程 PL/Java,但您必须非常小心,切勿从多个线程调用任何 PostgreSQL API(甚至是日志记录)。所以在实践中,是的,单线程。 (2认同)