Redrock Postgres 文档
主页 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

初始化驱动程序

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

导入 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

连接参数

除了标准连接参数之外,驱动程序还支持许多其他属性,这些属性可用于指定特定于 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 = 字符串 代表其建立连接的数据库用户。

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

  • options = 字符串 指定发送到 PostgreSQL 服务器的“options”连接初始化参数。例如,如果将此项设置为-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 (boolean) 默认值 false
    启用 SSL 连接。服务器必须已使用 SSL 支持进行编译。此属性不需要与其关联的值。它的存在仅仅指定了SSL连接。但是,为了与将来的版本兼容,首选值“true”。有关更多信息,请参阅使用 SSL
    为 SSL 连接设置证书和密钥可能很棘手,有关详细示例,请参阅测试文档

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

  • sslfactoryarg (String) : (已弃用)
    此值是上面提供的 sslfactory 类构造函数的可选参数。有关详细信息,请参阅名为“自定义 SSLSocketFactory”的章节。

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

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

注意

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

  • sslkey (String) 默认值 defaultdir/postgresql.pk8
    提供密钥文件的完整路径。默认值为defaultdir/postgresql.pk8。有关默认目录,请参阅 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

PKCS-12 密钥文件只有在扩展名为“.p12”(42.2.9+)或“.pfx”(42.2.16+)时才能识别。

如果您的密钥有密码,请使用下面描述的连接参数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 参数。仅当使用COPY命令且需要覆盖客户端编码时,才启用此选项。

  • logUnclosedConnections (boolean) 默认值 false
    客户端可能会因调用Connection对象的close()方法失败而泄漏Connection对象。如果调用者忽略了自己执行连接的关闭操作,最终,这些Connection对象将被垃圾回收,并且将调用finalize()方法,该方法将关闭Connection对象。终结器的使用只是一个权宜之计。为了帮助开发人员检测和纠正这些泄漏的来源,添加了 URL 参数logUnclosedConnections。它在每次Connection打开时捕获程序堆栈,如果在Connection未关闭的情况下调用了finalize()方法,则程序堆栈将打印到日志中。

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

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

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

  • binaryTransferEnable (String) 默认值 空字符串
    以逗号分隔的类型列表,用于启用二进制传输。类型的 OID 编号或名称。

  • binaryTransferDisable (String) 默认值 空字符串
    以逗号分隔的类型列表,用于禁用二进制传输。类型的 OID 编号或名称。 它会覆盖驱动程序默认设置中的值和使用binaryTransferEnable设置的值。

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

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

  • prepareThreshold (int) 默认值 5
    确定PreparedStatement切换到使用服务器端预备语句之前所需的执行次数。 默认值为 5,表示在第五次执行同一对象时开始使用服务器端预备语句。有关服务器端预备语句的详细信息,请参阅名为服务端预备语句的一节。

  • preparedStatementCacheQueries (int) 默认值 256
    确定每个连接中缓存的查询数。默认值为 256,这意味着如果在调用prepareStatement()中使用超过 256 个不同的查询,则最近最少使用的查询将被丢弃。高速缓存允许应用程序从服务端预备语句中受益(请参阅prepareThreshold),即使预备语句在每次执行后关闭也是如此。值 0 将禁用缓存。请注意,每个连接都有自己的语句高速缓存。

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

  • preferQueryMode (String) 默认值 extended
    指定用于执行对数据库的查询的模式:simple 表示(‘Q’ 执行,无解析,无绑定,仅文本模式),extended 表示始终使用 bind/execute 消息,extendedForPrepare 表示仅针对预备语句使用 extended 模式,extendedCacheEverything 表示使用 extended 协议并在查询缓存中尝试缓存每个语句(包括 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 Driver
    指定正在使用连接的应用程序的名称。 这允许数据库管理员通过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(通过 JSSE 的 Kerberos)。允许的值是 auto(默认值,见下文)、sspi(强制 SSPI)或 gssapi(强制 GSSAPI-JSSE)。如果此参数是 auto,则在服务器请求 SSPI 身份验证、JDBC 客户机在 Windows 上运行以及 SSPI 所需的 Waffle 库位于 CLASSPATH 类路径上时,将尝试 SSPI。 否则,通过 JSSE 使用 Kerberos/GSSAPI。

  • gssResponseTimeout (Integer) 默认值 5000\

    从服务器请求 GSS 加密连接后等待响应的时间(以毫秒为单位)。如果此值大于当前connectTimeout设置,则将使用connectTimeout设置。

注意

这种行为与libpq的行为并不完全匹配,libpq 在 Windows 上默认使用 Windows 的 SSPI 库进行 Kerberos(GSSAPI)请求。

即使 SSPI 可用,gssapi 模式强制使用 JSSE 的 GSSAPI,这与 9.4 版本之前的行为相匹配。

在非 Windows 平台上或 SSPI 不可用的情况下,强制 sspi 模式将产生 PSQLException 而失败。 要将 SSPI 与 PgJDBC 一起使用,必须确保在环境变量CLASSPATH中存在 waffle-jna及其依赖项。pgJDBC 没有集成waffle-jna到 pgJDBC jar 包中。

从 9.4 版本开始支持的参数:

  • sspiServiceClass (String) 默认值 POSTGRES
    指定构成 SPN 服务类一部分的 Windows SSPI 服务类的名称。默认值 POSTGRES 几乎总是正确的。请参阅:SSPI 身份验证,Service Principal Names(MSDN),DsMakeSpn(MSDN),配置 SSPI。在非 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,关闭自动提交时,驱动程序将通过发送BEGIN READ ONLY将事务设置为只读。设置为alwaysreadOnly设置为true时,如果自动提交为开启状态,会话将被设置为只读模式。如果自动提交为关闭状态,驱动程序将通过发送BEGIN READ ONLY将事务设置为只读。默认值为transaction

  • disableColumnSanitiser (boolean) 默认值 off
    设置此项为true可禁用列名称清理器。清理器将结果集中的列折叠为小写。默认设置是清理列(off)。

  • assumeMinServerVersion (String) 默认值 null
    假设服务器至少是给定版本,从而在连接时启用一些优化,而不是盲目地去试图匹配所有版本。

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

  • targetServerType (String) 默认值 any
    允许仅打开与具有所需状态的服务器的连接,允许的值为anyprimarymasterslavesecondarypreferSlavepreferSecondarypreferPrimaryprimarysecondary的区别目前是通过观察服务器是否允许写入来完成的。如果有任何可用的secondary,选择preferSecondary的值将尝试连接到备用数据库,否则也允许回退到连接到primary。选择preferPrimary的值尝试连接到主数据库(如果可用),否则允许回退到连接到可用的备用数据库。

请注意,master和slave这两个词正在被弃用。我们会默默地接受它们,但鼓励primary和secondary。

  • hostRecheckSeconds (int) 默认值 10
    控制有关主机状态的知识在 JVM 范围的全局高速缓存中高速缓存的时间(以秒为单位)。默认值为 10 秒。

  • loadBalanceHosts (boolean) 默认值 false
    在默认模式下(禁用)按给定顺序连接集合中的主机。如果启用的话,主机是从集合中随机选择的合适的候选服务器。

  • socketFactory (String) 默认值 null
    提供的值是建立套接字连接时用作SocketFactory的类名。这可用于创建 Unix 套接字而不是普通套接字。由socketFactory指定的类名必须是javax.net.SocketFactory的扩展,并可供驱动程序的类加载器使用。此类必须具有零参数构造函数,采用 String 参数的单参数构造函数或采用 Properties 参数的单参数构造函数。Properties 对象应该包含所有连接参数。字符串参数应该具有连接参数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、20%); 设置属性的限制值是最大堆内存的 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 接口的类名。如果此值为空,则将使用连接属性中的密码值。

Unix 套接字

通过添加 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

当运行一个高可用性的 postgres 集群时,集群中的每个节点具有相同的数据,简单的连接故障转移非常有用。例如,流式复制的 postgres 或 postgres-xc 集群。

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

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

如果备用数据库失败,将首先尝试列表中的所有备用数据库。在没有可用的备用数据库的情况下,将尝试主数据库。如果缓存中的所有服务器都标记为“无法连接”,则将按顺序尝试连接到 URL 中的所有主机。