驱动程序初始化

本节介绍如何在程序中加载和初始化 JDBC 驱动程序。

任何使用 JDBC 的源文件都需要导入 java.sql 包,使用

import java.sql.*;

注意

除非您使用 PostgreSQL® 对 JDBC API 的扩展,否则不应导入 org.postgresql 包。

应用程序不需要显式加载 org.postgresql.Driver 类,因为 pgJDBC 驱动程序 jar 支持 Java 服务提供者机制。当应用程序连接到 PostgreSQL® 时,JVM 会加载驱动程序(只要驱动程序的 jar 文件在类路径中)。

注意

在 Java 1.6 之前,驱动程序必须由应用程序加载:要么通过调用 Class.forName("org.postgresql.Driver");,要么通过将驱动程序类名作为 JVM 参数传递 java -Djdbc.drivers=org.postgresql.Driver example.ImageViewer

这些较旧的加载驱动程序的方法仍然受支持,但不再必要。

使用 JDBC,数据库由 URL(统一资源定位符)表示。对于 PostgreSQL®,它采用以下形式之一

  • jdbc:postgresql:database
  • jdbc:postgresql:/
  • jdbc:postgresql://host/database
  • jdbc:postgresql://host/
  • jdbc:postgresql://host:port/database
  • jdbc:postgresql://host:port/

这些参数具有以下含义

  • host = 服务器的主机名。默认为 localhost。要指定 IPv6 地址,您必须将 host 参数用方括号括起来,例如:jdbc:postgresql://[::1]:5740/accounting

  • port = 服务器正在监听的端口号。默认为 PostgreSQL® 标准端口号 (5432)。

  • database = 数据库名称。默认情况下,连接到与用于连接到服务器的用户名同名的数据库。

要连接,您需要从 JDBC 获取一个 Connection 实例。为此,您使用 DriverManager.getConnection() 方法:Connection db = DriverManager.getConnection(url, username, password)

重要

连接 URL 的任何部分中出现的任何 URL 保留字符(例如 /、:、@、(、)、[、]、&、#、=、? 和空格)必须进行百分比编码。有关详细信息,请参阅 RFC 3986

pgjdbc.config.cleanup.thread.ttl(毫秒,默认值:30000)。驱动程序有一个内部清理线程,用于监视和清理未关闭的连接。此属性设置清理线程在没有要清理的内容时将继续运行的持续时间。

除了标准连接参数外,驱动程序还支持许多其他属性,这些属性可用于指定特定于 PostgreSQL® 的其他驱动程序行为。这些属性可以在连接 URL 或 DriverManager.getConnection 的附加 Properties 对象参数中指定。以下示例说明了使用这两种方法建立 SSL 连接。

如果在 URL 和 Properties 对象中都指定了属性,则会忽略 Properties 对象中的值。

String url = "jdbc:postgresql://localhost/test";
Properties props = new Properties();
props.setProperty("user", "fred");
props.setProperty("password", "secret");
props.setProperty("ssl", "true");
Connection conn = DriverManager.getConnection(url, props);

String url = "jdbc:postgresql://localhost/test?user=fred&password=secret&ssl=true";
Connection conn = DriverManager.getConnection(url);
  • user = String 代表连接进行的数据库用户。

  • password = 字符串 数据库用户的密码。

  • options = 字符串 指定发送到 PostgreSQL 服务器的“选项”连接初始化参数。例如,将其设置为 -c statement_timeout=5min 将把此会话的语句超时参数设置为 5 分钟。有关详细信息,请参阅 客户端连接默认值

此属性的值可能包含空格或其他特殊字符,如果在连接 URL 中提供,则应对其进行适当编码。空格被认为是分隔命令行参数,除非用反斜杠 ( \ ) 转义;\\ 表示一个字面反斜杠。

Properties props = new Properties();
props.setProperty("options", "-c search_path=test,public,pg_catalog -c statement_timeout=90000");
Connection conn = DriverManager.getConnection(url, props);

String url = "jdbc:postgresql://localhost:5432/postgres?options=-c%20search_path=test,public,pg_catalog%20-c%20statement_timeout=90000";
Connection conn = DriverManager.getConnection(url);
  • ssl (布尔值) 默认值 false
    使用 SSL 连接。服务器必须使用 SSL 支持进行编译。此属性不需要关联的值。它的存在就指定了 SSL 连接。但是,为了与未来版本兼容,建议使用“true”值。有关更多信息,请参阅 使用 SSL
    设置 ssl 连接的证书和密钥可能很棘手,请参阅 测试文档 以获取详细示例。

  • sslfactory(字符串) 默认值 org.postgresql.ssl.LibPQFactory
    提供的值是用于在建立 SSL 连接时用作 SSLSocketFactory 的类名。有关更多信息,请参阅名为 自定义 SSLSocketFactory 的部分,默认值为 LibPQFactory

  • sslfactoryarg (字符串) : (已弃用)
    此值是上面提供的 sslfactory 类构造函数的可选参数。有关更多信息,请参阅名为 自定义 SSLSocketFactory 的部分。

  • sslmode (字符串) 默认值 prefer
    可能的取值包括 disableallowpreferrequireverify-caverify-fullrequireallowprefer 都默认使用非验证 SSL 工厂,并且不检查证书或主机名的有效性。 verify-ca 验证证书,但不验证主机名。 verify-full 将验证证书是否正确,并验证连接到的主机是否与证书具有相同的主机名。 默认值为 prefer 。 设置这些将需要在客户端机器上存储服务器证书,有关详细信息,请参阅 配置客户端

  • sslcert (String) 默认值 defaultdir/postgresql.crt
    提供证书文件的完整路径。 默认值为 defaultdir/postgresql.crt,其中 defaultdir 在 *nix 系统中为 ${user.home}/.postgresql/,在 Windows 系统中为 %appdata%/postgresql/
    它可以是 PEM 编码的 X509v3 证书

注意

使用 PKCS-12 密钥时,此参数将被忽略,因为在这种情况下,证书也从同一个密钥文件中检索。

  • sslkey (String) 默认值 defaultdir/postgresql.pk8
    提供密钥文件的完整路径。 默认值为 defaultdir/postgresql.pk8。 有关 defaultdir,请参见 sslcert。

注意

密钥文件 **必须** 采用 PKCS-12PKCS-8 DER 格式。 可以使用 openssl 命令将 PEM 密钥转换为 DER 格式: openssl pkcs8 -topk8 -inform PEM -in postgresql.key -outform DER -out postgresql.pk8 -v1 PBE-MD5-DES 创建密钥时,aliasname 必须为 user。 测试代码使用以下命令创建 .p12 密钥: openssl pkcs12 -export -in $< -inkey $*.key -out $@ -name user -CAfile $(SERVER_CRT_DIR)root.crt -caname local -passout pass:$(P12_PASSWORD)

只有具有“.p12”(42.2.9+)或“.pfx”(42.2.16+)扩展名的 PKCS-12 密钥文件才会被识别。

如果您的密钥有密码,请使用下面描述的 sslpassword 连接参数提供密码。 否则,您可以将标志 -nocrypt 添加到上面的命令中,以防止驱动程序请求密码。

注意

在需要高安全级别且密钥未通过其他方式(例如操作系统访问控制)保护的环境中,使用 -v1 PBE-MD5-DES 可能不足,或者密钥文件通过不可信通道传输。我们依赖于 Java 运行时提供的加密提供程序。此处记录的解决方案在编写时已知有效。如果您有更严格的安全需求,请参见 此处,了解问题的讨论以及有关选择更好密码套件的信息。

  • sslrootcert (String) 默认值 defaultdir/root.crt
    SSL 根证书的文件名。它可以是 PEM 编码的 X509v3 证书。

  • sslhostnameverifier (String) 默认值 org.postgresql.ssl.PGjdbcHostnameVerifier
    主机名验证器的类名。

  • sslpasswordcallback (String) 默认值 org.postgresql.ssl.jdbc4.LibPQFactory.ConsoleCallbackHandler
    SSL 密码提供程序的类名。

  • sslpassword (String) 默认值 null
    如果提供,将由 ConsoleCallbackHandler 使用。

  • sslResponseTimeout (Integer) 默认值 5000
    在向服务器请求 SSL 加密连接后等待响应的时间(以毫秒为单位)。如果此值大于当前的 connectTimeout,则将使用 connectTimeout。

  • protocolVersion (int) 默认值 null
    驱动程序支持 V3 前端/后端协议。V3 协议在 7.4 中引入,驱动程序默认情况下将尝试使用 V3 协议连接。

  • loggerLevel (String)
    此属性不再被驱动程序使用,将被忽略。所有日志记录配置都由 java.util.logging 处理。

  • loggerFile (String)
    此属性不再被驱动程序使用,将被忽略。所有日志记录配置都由 java.util.logging 处理。

  • allowEncodingChanges (boolean) 默认值 false
    在使用 V3 协议时,驱动程序会监控某些服务器配置参数的变化,这些参数不应被最终用户修改。client_encoding 设置由驱动程序设置,不应更改。如果驱动程序检测到更改,它将中止连接。但是,这种行为有一个合法的例外,即在服务器文件系统上的文件上使用 COPY 命令。指定此文件编码的唯一方法是更改 client_encoding 设置。JDBC 团队认为这是 COPY 命令的缺陷,希望将来提供其他方法来指定编码,但目前存在此 URL 参数。仅当您需要在执行复制时覆盖客户端编码时才启用此参数。

  • logUnclosedConnections (boolean) 默认值 false
    客户端可能会通过不调用其 close() 方法来泄漏 Connection 对象。最终这些对象将被垃圾回收,并且将调用 finalize() 方法,如果调用者没有自己关闭 Connection,则该方法将关闭 Connection。使用终结器只是一个权宜之计。为了帮助开发人员检测和纠正这些泄漏的来源,添加了 logUnclosedConnections URL 参数。它在每个 Connection 打开时捕获堆栈跟踪,如果在关闭之前到达 finalize() 方法,则将堆栈跟踪打印到日志中。

  • autosave (String) 默认值 never
    指定驱动程序在查询失败时应执行的操作。在 autosave=always 模式下,JDBC 驱动程序在每个查询之前设置一个保存点,并在失败时回滚到该保存点。在 autosave=never 模式(默认)下,永远不会进行保存点操作。在 autosave=conservative 模式下,为每个查询设置保存点,但是回滚仅针对罕见情况(例如“缓存的语句无法更改返回类型”或“语句 XXX 无效”),因此 JDBC 驱动程序回滚并重试。

  • cleanupSavepoints (boolean) 默认值 false
    确定在 autosave 模式下创建的 SAVEPOINT 是否在语句之前被释放。这样做是为了避免在执行数千个查询的情况下服务器上的共享缓冲区耗尽。

  • binaryTransfer (boolean) 默认值 true
    如果可能,使用二进制格式发送和接收数据。将其设置为 false 将禁用任何二进制传输。

  • binaryTransferEnable (String) 默认值 empty string
    一个逗号分隔的类型列表,用于启用二进制传输。可以是 OID 编号或名称。

  • binaryTransferDisable (String) 默认值 empty string
    一个逗号分隔的类型列表,用于禁用二进制传输。可以是 OID 编号或名称。覆盖驱动程序默认集中的值和使用 binaryTransferEnable 设置的值。

  • databaseMetadataCacheFields (int) 默认值 65536
    指定每个连接要缓存的字段的最大数量。值为 0 将禁用缓存。

  • databaseMetadataCacheFieldsMiB (int) 默认值 5
    指定每个连接要缓存的字段的最大大小(以兆字节为单位)。值为 0 将禁用缓存。

  • prepareThreshold (int) 默认值 5
    确定在切换到使用服务器端预处理语句之前需要执行的PreparedStatement次数。默认值为 5,这意味着在第五次执行相同的PreparedStatement对象时开始使用服务器端预处理语句。有关服务器端预处理语句的更多信息,请参阅名为服务器端预处理语句的部分。

  • preparedStatementCacheQueries (int) 默认值 256
    确定每个连接中缓存的查询数量。默认值为 256,这意味着如果您在prepareStatement()调用中使用超过 256 个不同的查询,则最不常用的查询将被丢弃。缓存允许应用程序从服务器端预处理语句(参见prepareThreshold)中获益,即使在每次执行后关闭预处理语句。值为 0 将禁用缓存。注意:每个连接都有自己的语句缓存。

  • preparedStatementCacheSizeMiB (int) 默认值 5
    确定预处理查询缓存的最大大小(以 MiB 为单位)(参见preparedStatementCacheQueries)。默认值为 5,这意味着如果您碰巧缓存了超过 5 MiB 的查询,则最不常用的查询将被丢弃。此设置的主要目的是防止OutOfMemoryError。值为 0 将禁用缓存。

  • preferQueryMode (String) 默认值 extended
    指定用于执行数据库查询的模式:simple 表示('Q' 执行,不解析,不绑定,仅文本模式),extended 表示始终使用绑定/执行消息,extendedForPrepared 表示仅对预处理语句使用扩展模式,endedCacheEverything 表示使用扩展协议并尝试缓存每个语句(包括 Statement.execute(String sql))在查询缓存中。extended | extendedForPrepared | extendedCacheEverything | simple

  • defaultRowFetchSize (int) 默认值 0
    确定ResultSet中每次与数据库交互获取的行数。限制每次与数据库交互获取的行数可以避免不必要的内存消耗,从而避免OutOfMemoryError。默认值为零,这意味着ResultSet将一次获取所有行。必须大于 0。

  • loginTimeout (int) 默认值 0
    指定等待建立数据库连接的时间。超时以秒为单位,最大值为 2147484。

  • connectTimeout (int) 默认 10
    用于套接字连接操作的超时值。如果连接到服务器的时间超过此值,则连接将断开。超时以秒为单位指定,最大值为 2147484,值为零表示禁用。

  • socketTimeout (int) 默认 0
    用于套接字读取操作的超时值。如果从服务器读取数据的时间超过此值,则连接将关闭。这可以用作强制的全局查询超时,也可以作为检测网络问题的方法。超时以秒为单位指定,最大值为 2147484,值为零表示禁用。

  • cancelSignalTimeout (int) 默认 10
    取消命令通过其自身的连接以带外方式发送,因此取消消息本身可能会卡住。此属性控制用于取消命令的“连接超时”和“套接字超时”。超时以秒为单位指定。

  • tcpKeepAlive (boolean) 默认 false
    启用或禁用 TCP 保活探测。

  • tcpNoDelay (boolean) 默认 true
    启用或禁用 TCP 无延迟。

  • unknownLength (int) 默认 Integer.MAX_VALUE
    某些 PostgreSQL 类型(如 TEXT)没有明确定义的长度。当通过 ResultSetMetaData.getColumnDisplaySizeResultSetMetaData.getPrecision 等函数返回有关这些类型的元数据时,我们必须提供一个值,并且各种客户端工具对它们希望看到的内容有不同的想法。此参数指定要为未知长度的类型返回的长度。

  • stringtype (String) 默认 null
    指定在通过 setString() 设置 PreparedStatement 参数时要使用的类型。如果 stringtype 设置为 VARCHAR(默认值),则此类参数将作为 varchar 参数发送到服务器。如果 stringtype 设置为 unspecified,则参数将作为无类型值发送到服务器,并且服务器将尝试推断适当的类型。如果您有一个使用 setString() 设置实际上是其他类型(如整数)的参数的现有应用程序,并且您无法更改应用程序以使用适当的方法(如 setInt()),则此方法很有用。

  • ApplicationName (String) 默认 PostgreSQL JDBC 驱动程序
    指定使用连接的应用程序的名称。这允许数据库管理员通过 pg_stat_activity 等视图查看哪些应用程序连接到服务器以及它们正在使用哪些资源。

  • kerberosServerName (String) 默认 postgres
    用于通过 GSSAPI 进行身份验证时的 Kerberos 服务名称。这等同于 libpq 的 PGKRBSRVNAME 环境变量,默认值为“postgres”。

  • jaasApplicationName (String) 默认值 pgjdbc
    指定 JAAS 系统或应用程序登录配置的名称。

  • jaasLogin (boolean) 默认值 true
    指定是否在使用 GSSAPI 进行身份验证之前执行 JAAS 登录。如果设置为 true(默认值),驱动程序将尝试使用配置的 JAAS 登录模块(例如 Krb5LoginModule)获取 GSS 凭据,然后再进行身份验证。要跳过 JAAS 登录,例如如果使用本机 GSS 实现来获取凭据,请将其设置为 false

  • gssEncMode (String) 默认值 allow
    PostgreSQL® 12 及更高版本现在允许 GSSAPI 加密连接。此参数控制是否强制使用 GSSAPI 加密。选项包括 disableallowpreferrequire

    • disable 很明显,它会禁用任何尝试使用 GSS 加密模式连接的尝试
    • allow 将以纯文本方式连接,然后如果服务器请求,它将切换到加密模式
    • prefer 将尝试以加密模式连接,如果无法获取加密连接,则会回退到纯文本模式
    • require 尝试以加密模式连接,如果无法实现,则连接将失败。
  • gsslib (String) 默认值 auto
    当服务器请求 Kerberos 或 SSPI 身份验证时,强制使用 SSPI(Windows 透明单点登录)或 GSSAPI(Kerberos,通过 JSSE)。允许的值为 auto(默认值,见下文)、sspi(强制使用 SSPI)或 gssapi(强制使用 GSSAPI-JSSE)。如果此参数为 auto,则如果服务器请求 SSPI 身份验证,JDBC 客户端在 Windows 上运行,并且 CLASSPATH 上存在 SSPI 所需的 Waffle 库,则会尝试使用 SSPI。否则,将使用 Kerberos/GSSAPI(通过 JSSE)。

    注意

    此行为与 libpq 不完全相同,libpq 在 Windows 上默认情况下使用 Windows 的 SSPI 库来处理 Kerberos(GSSAPI)请求。

    gssapi 模式强制使用 JSSE 的 GSSAPI,即使 SSPI 可用,这也与 9.4 之前的行为一致。在非 Windows 平台上或 SSPI 不可用的情况下,强制使用 sspi 模式将导致 PSQLException 错误。

    要使用 SSPI 与 PgJDBC,您必须确保 waffle-jna 及其依赖项存在于 CLASSPATH 中。pgJDBC 在 pgJDBC jar 中捆绑 waffle-jna

    兼容性矩阵

    pgjdbc waffle-jna
    < 42.7.1 < 2.0.0
    ≥ 42.7.1 ≥ 1.0.0
  • gssResponseTimeout (Integer) 默认 5000
    在向服务器请求 GSS 加密连接后等待响应的毫秒数。如果此值大于当前的 connectTimeout,则将使用 connectTimeout。自版本:9.4

  • sspiServiceClass (String) 默认 POSTGRES
    指定 Windows SSPI 服务类的名称,该服务类构成 SPN 的服务类部分。默认值 POSTGRES 几乎总是正确的。请参阅:SSPI 身份验证 (Pg 文档) 服务主体名称 (MSDN),DsMakeSpn (MSDN) 配置 SSPI (Pg wiki)。此参数在非 Windows 平台上被忽略。

  • useSpnego (boolean) 默认 false
    在 SSPI 身份验证请求中使用 SPNEGO

  • sendBufferSize (int) 默认 -1*
    在连接流上设置 SO_SNDBUF

  • receiveBufferSize (int) 默认 -1*
    在连接流上设置 SO_RCVBUF

  • readOnly (boolean) 默认 false
    将连接置于只读模式

  • readOnlyMode (String) 默认 transaction
    ignoretransactionalways 之一。控制将连接设置为只读时的行为,当设置为 ignore 时,readOnly 设置无效。当设置为 transactionreadOnly 设置为 true 且 autocommit 为 false 时,驱动程序将通过发送 BEGIN READ ONLY 将事务设置为只读。当设置为 alwaysreadOnly 设置为 true 时,如果 autoCommit 为 true,则会话将设置为 READ ONLY。如果 autocommit 为 false,驱动程序将通过发送 BEGIN READ ONLY 将事务设置为只读。默认值为 transaction

  • disableColumnSanitiser (boolean) 默认 off
    将此设置为true 将禁用列名清理器。清理器会将 ResultSet 中的列折叠为小写。默认情况下会清理列(关闭)。

  • assumeMinServerVersion (String) 默认值 null
    假设服务器至少为给定版本,因此可以在连接时启用一些优化,而不是尝试进行版本盲操作。

  • currentSchema (String) 默认值 null
    指定要设置在搜索路径中的模式(或用逗号分隔的多个模式)。此模式将用于解析在此连接上语句中使用的未限定对象名称。

  • targetServerType (String) 默认值 any
    允许仅打开与具有所需状态的服务器的连接,允许的值为 anyprimarymasterslavesecondarypreferSlavepreferSecondarypreferPrimary。主/从区分目前通过观察服务器是否允许写入来完成。值 preferSecondary 尝试连接到辅助服务器(如果有),否则允许回退到也连接到 primary。值 preferPrimary 尝试连接到主服务器(如果可用),否则允许回退到连接到可用的辅助服务器。

    • 注意: 主和从这两个词正在被弃用。我们将默默地接受它们,但鼓励使用主和从。
  • hostRecheckSeconds (int) 默认值 10
    控制在 JVM 范围内的全局缓存中缓存有关主机状态的知识的时间(以秒为单位)。默认值为 10 秒。

  • loadBalanceHosts (boolean) 默认值 false
    在默认模式(disabled)下,主机按给定的顺序连接。如果启用,则从一组合适的候选中随机选择主机。

  • socketFactory (String) *默认值 null*
    提供的值是用于在建立套接字连接时用作 SocketFactory 的类名。这可用于创建 Unix 套接字而不是普通套接字。socketFactory 指定的类名必须扩展 javax.net.SocketFactory 并对驱动程序的类加载器可用。此类必须具有一个零参数构造函数、一个带 String 参数的单参数构造函数或一个带 Properties 参数的单参数构造函数。Properties 对象将包含所有连接参数。String 参数将具有 socketFactoryArg 连接参数的值。

  • socketFactoryArg (String) : (已弃用)
    此值是上面提供的套接字工厂类构造函数的可选参数。

  • reWriteBatchedInserts (boolean) 默认值 false
    这将更改批处理插入,从 insert into foo (col1, col2, col3) values (1, 2, 3) 变为 insert into foo (col1, col2, col3) values (1, 2, 3), (4, 5, 6),这提供了 2-3 倍的性能提升。

  • replication (String) 默认值 false
    启动消息中传递的连接参数。此参数接受两个值:truedatabase。传递 true 会告诉后端进入 walsender 模式,在这种模式下,可以发出少量复制命令而不是 SQL 语句。在 walsender 模式下,只能使用简单的查询协议。将“database”作为值传递会指示 walsender 连接到 dbname 参数中指定的数据库,这将允许使用该连接从该数据库进行逻辑复制。参数应与 assumeMinServerVersion 一起使用,参数 >= 9.4(后端 >= 9.4)

  • escapeSyntaxCallMode (String) 默认值 select
    指定驱动程序如何将 JDBC 转义调用语法转换为底层 SQL,以调用过程或函数。在 escapeSyntaxCallMode=select 模式(默认模式)下,驱动程序始终使用 SELECT 语句(仅允许函数调用)。在 escapeSyntaxCallMode=callIfNoReturn 模式下,如果未指定返回参数,驱动程序将使用 CALL 语句(允许过程调用),否则驱动程序将使用 SELECT 语句。在 escapeSyntaxCallMode=call 模式下,驱动程序始终使用 CALL 语句(仅允许过程调用)。

  • maxResultBuffer (String) 默认值 null
    指定结果缓冲区的字节大小,在读取结果集时不能超过此大小。属性可以用两种方式指定

    • 作为字节大小(例如 100、150M、300K、400G、1T);
    • 作为最大堆内存的百分比(例如 10p、15pct、20percent);设置属性时的限制是最大堆内存的 90%。所有给定的值,如果要高于限制,将被降低到限制。默认情况下,maxResultBuffer 未设置(为 null),这意味着读取结果将不受限制地执行。
  • adaptiveFetch (boolean) 默认值 false
    指定从数据库请求的每次 ResultSet 中获取的行数是否应该动态。使用自适应获取计算的动态行数将尝试最大限度地利用 maxResultBuffer 属性中声明的缓冲区。行数将通过将 maxResultBuffer 大小除以迄今为止观察到的最大行大小来计算,并向下取整。第一次获取将具有 defaultRowFetchSize 中声明的行数。行数可以受 adaptiveFetchMinimumadaptiveFetchMaximum 限制。需要声明 maxResultBufferdefaultRowFetchSize 才能正常工作。默认情况下,adaptiveFetchfalse

  • adaptiveFetchMinimum (int) 默认值 0
    指定adaptiveFetch可以计算的最低行数。需要将adaptiveFetch设置为true才能生效。默认情况下,adaptiveFetch计算的最低行数为0。

  • adaptiveFetchMaximum (int) 默认值 -1
    指定adaptiveFetch可以计算的最高行数。需要将adaptiveFetch设置为true才能生效。默认情况下,adaptiveFetch计算的最高行数为-1,表示无限。

  • logServerErrorDetail (boolean) 默认值 true
    是否在异常和日志消息中包含服务器错误详细信息(例如内联查询参数)。设置为false将只包含最少的非敏感消息。默认情况下,此值设置为true,服务器错误详细信息将被传播。这可能包括敏感信息,例如查询参数。

  • quoteReturningIdentifiers (boolean) 默认值 false
    引用返回的列。有些ORM会引用所有内容,包括返回的列。如果我们引用它们,我们最终会向后端发送““colname””而不是“colname”,这将无法找到。

  • authenticationPluginClassName (String) 默认值 null
    实现AuthenticationPlugin接口的类的完全限定类名。如果为null,将使用连接属性中的密码值。

通过添加junixsocket,您可以获得一个与驱动程序一起工作的套接字工厂。代码可以在这里找到 这里,说明可以在这里找到 这里

junixsocket 的依赖项是

<dependency>
  <groupId>com.kohlschutter.junixsocket</groupId>
  <artifactId>junixsocket-core</artifactId>
  <version>2.5.1</version>
</dependency>

只需将?socketFactory=org.newsclub.net.unix.AFUNIXSocketFactory$FactoryArg&socketFactoryArg=[path-to-the-unix-socket]添加到连接 URL 中。

对于许多发行版,默认路径是 /var/run/postgresql/.s.PGSQL.5432

为了支持简单的连接故障转移,可以在连接 URL 中定义多个端点(主机和端口对),这些端点用逗号分隔。驱动程序将依次尝试连接到每个端点,直到连接成功。如果所有尝试都失败,则会抛出正常的连接异常。

连接 URL 的语法如下:jdbc:postgresql://host1:port1,host2:port2/database

当连接到具有相同数据的多个节点的高可用性 PostgreSQL 安装时,简单的连接故障转移非常有用。例如,流复制 PostgreSQL 或 PostgreSQL-XC 集群。

例如,应用程序可以创建两个连接池。一个数据源用于写入,另一个用于读取。写入池仅将连接限制到主节点:jdbc:postgresql://node1,node2,node3/accounting?targetServerType=primary

读取池在辅助节点之间平衡连接,但如果辅助节点不可用,也允许连接到主节点:jdbc:postgresql://node1,node2,node3/accounting?targetServerType=preferSecondary&loadBalanceHosts=true

如果辅助节点出现故障,将首先尝试列表中的所有辅助节点。如果所有辅助节点都不可用,则将尝试连接到主节点。如果所有服务器在缓存中都被标记为“无法连接”,则将尝试按顺序连接到 URL 中的所有主机。