Skip to content

20.11. 客户端连接默认值#

20.11.1. 语句行为
20.11.2. 语言环境和格式化
20.11.3. 共享库预加载
20.11.4. 其他默认值

20.11.1. 语句行为#

client_min_messages (枚举) #

控制哪些 消息级别 发送到客户端。有效值包括 DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOGNOTICEWARNINGERROR。每个级别都包括其后的所有级别。级别越靠后,发送的消息越少。默认值为 NOTICE。请注意,LOG 在此处的等级与 log_min_messages 中的等级不同。

INFO 级消息始终发送到客户端。

search_path (字符串) #

此变量指定在使用不带架构指定的对象(表、数据类型、函数等)的简单名称时搜索架构的顺序。当不同架构中存在名称相同的对象时,将使用在搜索路径中首先找到的对象。不在搜索路径中任何架构中的对象只能通过使用限定(带点)名称指定其包含的架构来引用。

search_path 的值必须是架构名称的逗号分隔列表。任何不是现有架构或用户没有 USAGE 权限的架构的名称都将被忽略。

如果列表项之一是特殊名称 $user,则将替换为 CURRENT_USER 返回的名称的架构(如果存在这样的架构且用户有 USAGE 权限)。(如果没有,则忽略 $user。)

系统目录架构 pg_catalog 始终会被搜索,无论是否在路径中提及。如果在路径中提及,则将按指定顺序搜索。如果 pg_catalog 不在路径中,则将在搜索任何路径项 之前 搜索它。

同样,如果当前会话的临时表模式 pg_temp_nnn 存在,则始终对其进行搜索。可以使用别名 pg_temp 在路径中明确列出它。如果未在路径中列出它,则首先搜索它(甚至在 pg_catalog 之前)。但是,仅搜索临时模式以查找关系(表、视图、序列等)和数据类型名称。永远不会搜索它以查找函数或运算符名称。

在未指定特定目标模式的情况下创建对象时,它们将被放置在 search_path 中命名的第一个有效模式中。如果搜索路径为空,则会报告错误。

此参数的默认值为 "$user", public。此设置支持数据库的共享使用(其中没有用户拥有私有模式,并且所有用户都共享 public 的使用)、每个用户的私有模式以及这些模式的组合。可以通过全局或每个用户更改默认搜索路径设置来获得其他效果。

有关模式处理的更多信息,请参阅 第 5.9 节。特别是,默认配置仅适用于具有单个用户或几个相互信任用户的数据库。

可以通过 函数 current_schemas(请参阅 第 9.26 节)检查搜索路径的当前有效值。这与检查 search_path 的值并不完全相同,因为 current_schemas 显示了 search_path 中出现的项是如何解析的。

row_security (boolean) #

此变量控制是否引发错误而不是应用行安全策略。当设置为 on 时,策略正常应用。当设置为 off 时,查询失败,否则将应用至少一项策略。默认值为 on。在有限的行可见性可能导致不正确的结果的情况下,更改为 off;例如,pg_dump 默认进行此更改。此变量对绕过每个行安全策略的角色(即超级用户和具有 BYPASSRLS 属性的角色)没有影响。

有关行安全策略的更多信息,请参阅 CREATE POLICY

default_table_access_method (string) #

如果 CREATE 命令未明确指定访问方法,或使用不允许指定表访问方法的 SELECT ... INTO,则此参数指定创建表或物化视图时要使用的默认表访问方法。默认值为 heap

default_tablespace (string) #

CREATE 命令未明确指定表空间时,此变量指定创建对象(表和索引)的默认表空间。

此值可以是表空间的名称,也可以是空字符串,以指定使用当前数据库的默认表空间。如果此值与任何现有表空间的名称不匹配,PostgreSQL 将自动使用当前数据库的默认表空间。如果指定了非默认表空间,则用户必须拥有该表空间的 CREATE 权限,否则创建尝试将失败。

此变量不用于临时表;对于临时表,将改用 temp_tablespaces

创建数据库时也不会使用此变量。默认情况下,新数据库会从其复制的模板数据库继承其表空间设置。

如果在创建分区表时将此参数设置为非空字符串,则分区表的表空间将设置为该值,该值将用作未来创建的分区的默认表空间,即使 default_tablespace 在此之后已更改。

有关表空间的详细信息,请参见 第 23.6 节

default_toast_compression (enum) #

此变量设置可压缩列值的默认 TOAST 压缩方法。(可以通过在 CREATE TABLEALTER TABLE 中设置 COMPRESSION 列选项,为各个列覆盖此设置。)受支持的压缩方法为 pglz 和(如果 PostgreSQL 使用 --with-lz4 编译)lz4。默认值为 pglz

temp_tablespaces (string) #

此变量指定在 CREATE 命令未明确指定表空间时,用于创建临时对象(临时表和临时表上的索引)的表空间。用于对大型数据集进行排序等目的的临时文件也会在这些表空间中创建。

该值为表空间名称列表。当列表中有多个名称时,PostgreSQL 每次创建临时对象时都会从列表中随机选择一个成员;但在一个事务中,连续创建的临时对象将按列表中的顺序依次放置在连续的表空间中。如果列表中选定的元素为空字符串,PostgreSQL 将自动使用当前数据库的默认表空间。

temp_tablespaces 以交互方式设置时,指定不存在的表空间或指定用户没有 CREATE 权限的表空间都是错误的。但是,在使用先前设置的值时,将忽略不存在的表空间,以及用户没有 CREATE 权限的表空间。此规则尤其适用于在 postgresql.conf 中设置的值。

默认值为一个空字符串,这会导致所有临时对象都创建在当前数据库的默认表空间中。

另请参见 default_tablespace

check_function_bodies (boolean) #

此参数通常为 on。当设置为 off 时,它将在 CREATE FUNCTIONCREATE PROCEDURE 期间禁用例程主体字符串的验证。禁用验证可避免验证过程的副作用,特别是防止因前向引用等问题而导致的误报。在代表其他用户加载函数之前,将此参数设置为 offpg_dump 会自动执行此操作。

default_transaction_isolation (enum) #

每个 SQL 事务都有一个隔离级别,可以是 未提交读已提交读可重复读可串行化。此参数控制每个新事务的默认隔离级别。默认值为 已提交读

有关详细信息,请参阅 第 13 章SET TRANSACTION

default_transaction_read_only (boolean) #

只读 SQL 事务无法更改非临时表。此参数控制每个新事务的默认只读状态。默认值为 off(读/写)。

有关详细信息,请参阅 SET TRANSACTION

default_transaction_deferrable (boolean) #

serializable 隔离级别下运行时,可延迟可延迟的只读 SQL 事务,然后再允许其继续。但是,一旦它开始执行,就不会产生确保可串行化所需的任何开销;因此,串行化代码没有理由因为并发更新而强制它中止,这使得此选项适合于长时间运行的只读事务。

此参数控制每个新事务的默认可延迟状态。它目前对读/写事务或在低于 serializable 的隔离级别下运行的事务没有影响。默认值为 off

有关详细信息,请参阅 SET TRANSACTION

transaction_isolation (enum) #

此参数反映当前事务的隔离级别。在每个事务开始时,它被设置为 default_transaction_isolation 的当前值。任何后续尝试更改它都等效于 SET TRANSACTION 命令。

transaction_read_only (boolean) #

此参数反映当前事务的只读状态。在每个事务开始时,它被设置为 default_transaction_read_only 的当前值。任何后续尝试更改它都等效于 SET TRANSACTION 命令。

transaction_deferrable (boolean) #

此参数反映当前事务的可推迟状态。在每个事务开始时,它被设置为 default_transaction_deferrable 的当前值。任何后续更改尝试都等同于 SET TRANSACTION 命令。

session_replication_role (enum) #

控制当前会话的复制相关触发器和规则的触发。可能的值为 origin(默认值)、replicalocal。设置此参数会导致丢弃任何先前缓存的查询计划。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

此设置的预期用途是,当逻辑复制系统应用复制的更改时,将其设置为 replica。其效果是,触发器和规则(未从其默认配置更改)将不会在副本上触发。有关更多信息,请参阅 ALTER TABLE 子句 ENABLE TRIGGERENABLE RULE

PostgreSQL 在内部将设置 originlocal 视为相同。第三方复制系统可能会将其用于内部目的,例如使用 local 来指定不应复制其更改的会话。

由于外键是作为触发器实现的,因此将此参数设置为 replica 也会禁用所有外键检查,如果使用不当,可能会导致数据处于不一致的状态。

statement_timeout (integer) #

中止任何花费时间超过指定数量的语句。如果将 log_min_error_statement 设置为 ERROR 或更低,则超时语句也会被记录。如果未指定此值单位,则将其视为毫秒。零值(默认值)禁用超时。

超时时间从命令到达服务器到服务器完成命令的时间开始计算。如果在单一简单查询消息中出现多个 SQL 语句,则超时时间将分别应用于每个语句。(13 版之前的 PostgreSQL 版本通常将超时时间应用于整个查询字符串。)在扩展查询协议中,超时时间从任何与查询相关的消息(解析、绑定、执行、描述)到达时开始计算,并在执行或同步消息完成时取消。

不建议在 postgresql.conf 中设置 statement_timeout,因为它会影响所有会话。

lock_timeout (integer) #

中止在尝试获取表、索引、行或其他数据库对象的锁时等待时间超过指定时间的任何语句。时间限制分别适用于每次获取锁的尝试。该限制既适用于显式锁定请求(例如 LOCK TABLESELECT FOR UPDATE,不带 NOWAIT),也适用于隐式获取的锁。如果未指定单位,此值将被视为毫秒。值为零(默认值)将禁用超时。

statement_timeout 不同,此超时仅在等待锁时发生。请注意,如果 statement_timeout 为非零,则将 lock_timeout 设置为相同或更大的值毫无意义,因为语句超时始终会先触发。如果 log_min_error_statement 设置为 ERROR 或更低,则将记录超时语句。

不建议在 postgresql.conf 中设置 lock_timeout,因为它会影响所有会话。

idle_in_transaction_session_timeout (integer) #

终止在打开的事务中处于空闲状态(即等待客户端查询)超过指定时间的任何会话。如果未指定单位,此值将被视为毫秒。值为零(默认值)将禁用超时。

此选项可用于确保空闲会话不会长时间持有锁。即使未持有任何重要锁,打开的事务也会阻止清理仅对该事务可见的最近死亡元组;因此,长时间保持空闲状态会导致表膨胀。有关更多详细信息,请参阅第 25.1 节

idle_session_timeout (integer) #

终止任何空闲(即等待客户端查询)但不在打开的事务中的会话,时间超过指定时间。如果未指定单位,则此值将视为毫秒。值为零(默认值)将禁用超时。

与打开的事务不同,没有事务的空闲会话不会给服务器带来很大成本,因此与启用 idle_in_transaction_session_timeout 相比,启用此超时需求较小。

请谨慎对通过连接池软件或其他中间件建立的连接强制执行此超时,因为此类层可能无法很好地响应意外的连接关闭。可能只对交互式会话启用此超时,例如仅将其应用于特定用户,这会很有帮助。

vacuum_freeze_table_age (integer) #

如果表的 pg_class.relfrozenxid 字段已达到此设置指定的期限,VACUUM 将执行激进扫描。激进扫描与常规 VACUUM 的不同之处在于,它会访问可能包含未冻结 XID 或 MXID 的每个页面,而不仅仅是可能包含死亡元组的页面。默认值为 1.5 亿个事务。尽管用户可以将此值设置为从零到二十亿的任意值,但 VACUUM 会将有效值静默限制为 autovacuum_freeze_max_age 的 95%,以便定期手动 VACUUM 有机会在针对该表启动反环绕自动清理之前运行。有关更多信息,请参阅第 25.1.5 节

vacuum_freeze_min_age (integer) #

指定 VACUUM 应使用的截止年龄(以事务为单位),以决定是否触发冻结具有较旧 XID 的页面的操作。默认值为 5000 万个事务。虽然用户可以将此值设置为介于零到十亿之间的任意值,但 VACUUM 会将有效值静默限制为 autovacuum_freeze_max_age 值的一半,以便强制自动真空之间的时间不会过短。有关详细信息,请参见第 25.1.5 节

vacuum_failsafe_age (integer) #

指定表 pg_class.relfrozenxid 字段在 VACUUM 采取非常措施以避免系统范围的事务 ID 环绕失败之前可以达到的最大年龄(以事务为单位)。这是 VACUUM 的最后手段策略。failsafe 通常在自动真空运行一段时间后触发,以防止事务 ID 环绕,尽管 failsafe 可以在任何 VACUUM 期间触发。

当触发 failsafe 时,将不再应用任何有效的基于成本的延迟,将绕过其他非必要的维护任务(例如索引真空),并且将禁用正在使用的任何缓冲区访问策略,从而使 VACUUM 可以自由使用所有共享缓冲区

默认值为 16 亿个事务。虽然用户可以将此值设置为介于零到 21 亿之间的任意值,但 VACUUM 会将有效值静默调整为不低于 autovacuum_freeze_max_age 的 105%。

vacuum_multixact_freeze_table_age (integer) #

如果表的 pg_class.relminmxid 字段已达到此设置指定的年龄,VACUUM 将执行激进扫描。激进扫描与常规 VACUUM 的不同之处在于,它会访问可能包含未冻结 XID 或 MXID 的每个页面,而不仅仅是可能包含死元组的页面。默认值为 1.5 亿个多事务。尽管用户可以将此值设置为 0 到 20 亿之间的任何值,但 VACUUM 会在不提示的情况下将有效值限制为 autovacuum_multixact_freeze_max_age 的 95%,以便定期手动 VACUUM 有机会在针对表启动反环绕之前运行。有关更多信息,请参阅 第 25.1.5.1 节

vacuum_multixact_freeze_min_age (integer) #

指定 VACUUM 应使用的截止年龄(以多事务为单位),以决定是否触发冻结具有较旧多事务 ID 的页面。默认值为 500 万个多事务。尽管用户可以将此值设置为 0 到 10 亿之间的任何值,但 VACUUM 会在不提示的情况下将有效值限制为 autovacuum_multixact_freeze_max_age 值的一半,以便强制自动清理之间的时间不会过短。有关更多信息,请参阅 第 25.1.5.1 节

vacuum_multixact_failsafe_age (integer) #

指定表 pg_class.relminmxid 字段在 VACUUM 采取特殊措施以避免系统范围的多事务 ID 环绕失败之前可以达到的最大年龄(以多事务为单位)。这是 VACUUM 的最后手段策略。故障保护通常在自动清理触发以防止事务 ID 环绕已经运行了一段时间后触发,但故障保护也有可能在任何 VACUUM 期间触发。

当故障保护触发时,将不再应用任何有效的基于成本的延迟,并且将绕过其他非必要的维护任务(例如索引清理)。

默认值为 16 亿个多事务。虽然用户可以将此值设置为 0 到 21 亿之间的任何值,但 VACUUM 会静默地将有效值调整为不小于 autovacuum_multixact_freeze_max_age 的 105%。

bytea_output (enum) #

设置 bytea 类型的输出格式。有效值为 hex(默认值)和 escape(传统的 PostgreSQL 格式)。有关详细信息,请参阅 第 8.4 节。无论此设置如何,bytea 类型始终接受输入的两种格式。

xmlbinary (enum) #

设置如何在 XML 中对二进制值进行编码。例如,当函数 xmlelementxmlforestbytea 值转换为 XML 时,此设置适用。可能的值为 base64hex,它们都在 XML Schema 标准中定义。默认值为 base64。有关与 XML 相关的函数的详细信息,请参阅 第 9.15 节

此处实际的选择主要取决于品味,仅受客户端应用程序中可能存在的限制的约束。虽然十六进制编码会比 base64 编码稍大,但这两种方法都支持所有可能的值。

xmloption (enum) #

设置在 XML 和字符字符串值之间转换时,DOCUMENTCONTENT 是否隐式。有关此内容的说明,请参见 第 8.13 节。有效值是 DOCUMENTCONTENT。默认值为 CONTENT

根据 SQL 标准,设置此选项的命令是

SET XML OPTION { DOCUMENT | CONTENT };

此语法在 PostgreSQL 中也可用。

gin_pending_list_limit (integer) #

设置 GIN 索引的待处理列表的最大大小,该列表在启用 fastupdate 时使用。如果列表增长超过此最大大小,则通过将其中的条目批量移动到索引的主 GIN 数据结构中来清理它。如果未指定单位,则此值将以千字节为单位。默认值为四兆字节 (4MB)。可以通过更改索引存储参数来覆盖单个 GIN 索引的此设置。有关详细信息,请参见 第 70.4.1 节第 70.5 节

createrole_self_grant (string) #

如果具有 CREATEROLE 但不具有 SUPERUSER 的用户创建了一个角色,并且如果将其设置为非空值,则将使用指定选项将新创建的角色授予创建用户。该值必须是 setinherit 或这些值的逗号分隔列表。默认值为空字符串,它将禁用此功能。

此选项的目的是允许不是超级用户的 CREATEROLE 用户自动继承或自动获得 SET ROLE 到任何创建用户的权限。由于始终隐式授予 CREATEROLE 用户对创建角色的 ADMIN OPTION,因此该用户始终可以执行 GRANT 语句,该语句将产生与此设置相同的效果。但是,如果授予自动进行,则出于可用性原因可能很方便。超级用户自动继承每个角色的权限,并且始终可以 SET ROLE 到任何角色,并且此设置可用于为 CREATEROLE 用户生成类似的行为,以供他们创建的用户使用。

20.11.2. 区域设置和格式化#

DateStyle (string) #

设置日期和时间值的显示格式,以及解释不明确日期输入值的规则。出于历史原因,此变量包含两个独立的组件:输出格式规范 (ISOPostgresSQLGerman) 和年/月/日排序的输入/输出规范 (DMYMDYYMD)。可以单独或一起设置这些规范。关键字 EuroEuropeanDMY 的同义词;关键字 USNonEuroNonEuropeanMDY 的同义词。有关更多信息,请参阅 第 8.5 节。内置默认值为 ISO, MDY,但 initdb 将使用与所选 lc_time 区域设置的行为相对应的设置来初始化配置文件。

IntervalStyle (enum) #

设置间隔值的显示格式。值 sql_standard 将生成与 标准间隔文本相匹配的输出。值 postgres(这是默认值)将生成与 PostgreSQL 8.4 之前的版本相匹配的输出,当时 DateStyle 参数设置为 ISO。值 postgres_verbose 将生成与 PostgreSQL 8.4 之前的版本相匹配的输出,当时 DateStyle 参数设置为非 ISO 输出。值 iso_8601 将生成与 ISO 8601 第 4.4.3.2 节中定义的时间间隔 带设计符的格式 相匹配的输出。

IntervalStyle 参数还会影响不明确间隔输入的解释。有关更多信息,请参阅 第 8.5.4 节

TimeZone (string) #

设置时区以显示和解释时间戳。内置默认值为 GMT,但通常在 postgresql.conf 中被覆盖;initdb 将安装一个与系统环境相对应的设置。有关详细信息,请参见 第 8.5.3 节

timezone_abbreviations (string) #

设置服务器将接受的用于日期时间输入的时区缩写集合。默认值为 'Default',这是一个在世界大部分地区适用的集合;还有 'Australia''India',还可以为特定安装定义其他集合。有关详细信息,请参见 第 B.4 节

extra_float_digits (integer) #

此参数调整用于浮点值文本输出的数字位数,包括 float4float8 和几何数据类型。

如果值为 1(默认值)或以上,则浮点值以最短精确格式输出;请参见 第 8.1.3 节。实际生成的数字位数仅取决于要输出的值,而不取决于此参数的值。对于 float8 值,最多需要 17 位数字,对于 float4 值,最多需要 9 位数字。此格式既快速又精确,在正确读取时完全保留原始二进制浮点值。为了保持历史兼容性,允许的值最高为 3。

如果值为零或负值,则输出将舍入到给定的十进制精度。所使用的精度是该类型的标准数字(FLT_DIGDBL_DIG,视情况而定),根据此参数的值进行减少。(例如,指定 -1 将导致 float4 值输出舍入到 5 个有效数字,float8 值舍入到 14 个数字。)此格式较慢,且不会保留二进制浮点值的全部位,但可能更具可读性。

注意

此参数的含义及其默认值在 PostgreSQL 12 中已更改;有关进一步讨论,请参见 第 8.1.3 节

client_encoding (string) #

设置客户端编码(字符集)。默认情况下,使用数据库编码。PostgreSQL 服务器支持的字符集在 第 24.3.1 节 中进行了描述。

lc_messages (string) #

设置显示消息的语言。可接受的值取决于系统;有关更多信息,请参见 第 24.1 节。如果此变量设置为空字符串(这是默认值),则该值将以系统依赖的方式从服务器的执行环境中继承。

在某些系统上,此语言环境类别不存在。设置此变量仍然有效,但不会产生任何效果。此外,可能不存在所需语言的翻译消息。在这种情况下,您将继续看到英文消息。

只有超级用户和具有适当 SET 权限的用户才能更改此设置。

lc_monetary (string) #

设置用于格式化货币金额的区域设置,例如使用 to_char 系列函数。可接受的值取决于系统;有关详细信息,请参阅 第 24.1 节。如果此变量设置为一个空字符串(这是默认值),则该值将以系统相关的方式从服务器的执行环境中继承。

lc_numeric (string) #

设置用于格式化数字的区域设置,例如使用 to_char 系列函数。可接受的值取决于系统;有关详细信息,请参阅 第 24.1 节。如果此变量设置为一个空字符串(这是默认值),则该值将以系统相关的方式从服务器的执行环境中继承。

lc_time (string) #

设置用于格式化日期和时间的区域设置,例如使用 to_char 系列函数。可接受的值取决于系统;有关详细信息,请参阅 第 24.1 节。如果此变量设置为一个空字符串(这是默认值),则该值将以系统相关的方式从服务器的执行环境中继承。

icu_validation_level (enum) #

当遇到 ICU 区域设置验证问题时,控制使用哪个 消息级别 来报告问题。有效值为 DISABLEDDEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORLOG

如果设置为 DISABLED,则根本不会报告验证问题。否则,将在给定的消息级别报告问题。默认值为 WARNING

default_text_search_config (string) #

选择那些没有指定配置的显式参数的文本搜索函数的变体所使用的文本搜索配置。有关详细信息,请参阅 第 12 章。内置默认值为 pg_catalog.simple,但如果可以识别与该区域设置匹配的配置,initdb 将使用与所选 lc_ctype 区域设置相对应的设置来初始化配置文件。

20.11.3. 共享库预加载#

有几种设置可用于将共享库预加载到服务器中,以便加载其他功能或获得性能优势。例如,设置'$libdir/mylib'将导致mylib.so(或在某些平台上,mylib.sl)从安装的标准库目录中预加载。这些设置之间的差异在于它们生效的时间以及更改它们所需的权限。

PostgreSQL程序语言库可以通过这种方式预加载,通常使用语法'$libdir/plXXX',其中XXXpgsqlperltclpython

只有专门用于与 PostgreSQL 一起使用的共享库才能通过这种方式加载。每个 PostgreSQL 支持的库都有一个“魔术块”,用于检查以确保兼容性。因此,无法通过这种方式加载非 PostgreSQL 库。您可以使用诸如LD_PRELOAD之类的操作系统设施来实现此目的。

通常,请参阅特定模块的文档以了解加载该模块的推荐方法。

local_preload_libraries (string) #

此变量指定在连接启动时要预加载的一个或多个共享库。它包含一个以逗号分隔的库名称列表,其中每个名称的解释与 LOAD 命令相同。条目之间的空格将被忽略;如果您需要在名称中包含空格或逗号,请用双引号将库名称括起来。参数值仅在连接开始时生效。后续更改无效。如果未找到指定的库,连接尝试将失败。

此选项可由任何用户设置。因此,可加载的库限制为安装的标准库目录的 plugins 子目录中出现的库。(数据库管理员负责确保仅安装 安全 库。)local_preload_libraries 中的条目可以明确指定此目录,例如 $libdir/plugins/mylib,或仅指定库名称——mylib 的效果与 $libdir/plugins/mylib 相同。

此功能的目的是允许无特权用户在特定会话中加载调试或性能测量库,而无需明确的 LOAD 命令。为此,通常使用客户端上的 PGOPTIONS 环境变量或使用 ALTER ROLE SET 来设置此参数。

但是,除非模块专门设计为以这种方式供非超级用户使用,否则这通常不是要使用的正确设置。请改用 session_preload_libraries

session_preload_libraries (string) #

此变量指定在连接启动时要预加载的一个或多个共享库。它包含一个用逗号分隔的库名称列表,其中每个名称的解释方式与 LOAD 命令相同。条目之间的空格将被忽略;如果你需要在名称中包含空格或逗号,请用双引号将库名称括起来。参数值仅在连接开始时生效。后续更改无效。如果找不到指定的库,则连接尝试将失败。只有超级用户和具有相应 SET 权限的用户才能更改此设置。

此功能的目的是允许在没有给出明确的 LOAD 命令的情况下,将调试或性能测量库加载到特定会话中。例如,可以通过使用 ALTER ROLE SET 为给定用户名下的所有会话设置此参数,来启用 auto_explain。此外,此参数可以在不重新启动服务器的情况下更改(但更改仅在启动新会话时生效),因此即使它们应适用于所有会话,也可以通过这种方式更轻松地添加新模块。

shared_preload_libraries 不同,在会话启动时加载库而不是在首次使用时加载库,没有很大的性能优势。但是,当使用连接池时,会有一些优势。

shared_preload_libraries (string) #

此变量指定服务器启动时预加载的一个或多个共享库。它包含一个以逗号分隔的库名称列表,其中每个名称的解释方式与 LOAD 命令相同。条目之间的空格会被忽略;如果需要在名称中包含空格或逗号,请用双引号将库名称括起来。此参数只能在服务器启动时设置。如果找不到指定的库,服务器将无法启动。

有些库需要执行某些操作,这些操作只能在启动后执行,例如分配共享内存、保留轻量级锁或启动后台工作进程。这些库必须通过此参数在服务器启动时加载。有关详细信息,请参阅每个库的文档。

其他库也可以预加载。通过预加载共享库,可以在首次使用库时避免库启动时间。但是,即使该进程从未使用该库,启动每个新服务器进程的时间也可能会略有增加。因此,此参数仅推荐用于大多数会话中将使用的库。此外,更改此参数需要重新启动服务器,因此这不是用于短期调试任务的正确设置。相反,请使用 session_preload_libraries

注意

在 Windows 主机上,在服务器启动时预加载库不会减少启动每个新服务器进程所需的时间;每个服务器进程将重新加载所有预加载库。但是,shared_preload_libraries 对于需要在启动后执行操作的库在 Windows 主机上仍然有用。

jit_provider (string) #

此变量是要使用的 JIT 提供程序库的名称(请参阅 第 32.4.2 节)。默认值为 llvmjit。此参数只能在服务器启动时设置。

如果设置为不存在的库, 将不可用,但不会引发错误。这允许 JIT 支持与主 PostgreSQL 包分开安装。

20.11.4. 其他默认值#

dynamic_library_path (string) #

如果需要打开一个可动态加载的模块,并且在 CREATE FUNCTIONLOAD 命令中指定的的文件名没有目录组件(即,名称不包含斜杠),系统将在此路径中搜索所需的文件。

dynamic_library_path 的值必须是绝对目录路径列表,由冒号(或在 Windows 上为分号)分隔。如果列表元素以特殊字符串 $libdir 开头,则编译的 PostgreSQL 包库目录将替换为 $libdir;这是安装标准 PostgreSQL 发行版提供的模块的位置。(使用 pg_config --pkglibdir 找出此目录的名称。)例如

dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'

或在 Windows 环境中

dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'

此参数的默认值是 '$libdir'。如果该值被设置为一个空字符串,则自动路径搜索将被关闭。

此参数可以在运行时由超级用户和具有适当 SET 权限的用户更改,但以这种方式进行的设置只会持续到客户端连接结束,因此此方法应保留用于开发目的。设置此参数的推荐方法是在 postgresql.conf 配置文件中。

gin_fuzzy_search_limit (integer) #

GIN 索引扫描返回的集合大小的软上限。有关更多信息,请参见 第 70.5 节