↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

20.11. 客户端连接默认值 #

20.11.1. 语句行为 #

client_min_messages (enum) #

控制被发送给客户端的消息级别。有效值是 DEBUG5、DEBUG4、DEBUG3、DEBUG2、DEBUG1、LOG、NOTICE、WARNING、ERROR。每个级别都包括其后的所有级别。级别越靠后,被发送的消息越少。默认值是 NOTICE。注意 LOG 在这里的排序与 log_min_messages 中的不同。

INFO 级别的消息总是被发送到客户端。

search_path (string) #

这个变量指定当一个对象(表、数据类型、函数等)被用一个无模式限定的简单名称引用时,搜索该对象时的模式顺序。当在不同模式中有同名对象时,将使用第一个在搜索路径中被找到的对象。一个不属于搜索路径中任何一个模式的对象只能通过用限定名(带点号)指定包含它的模式来引用。

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 节。特别地,只有当数据库只有一个用户或者有少数的相互信任的用户时,默认配置是合适的。

搜索路径的当前有效值可以通过 SQL 函数 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 TABLE 或 ALTER 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) #

这个参数通常为打开。当设置为 off 时,它禁用 CREATE FUNCTION 和 CREATE PROCEDURE 期间对例程体字符串的验证。禁用验证避免了验证处理的副作用,特别是避免前向引用等问题导致的误报。在代表其他用户载入函数之前设置这个参数为 off;pg_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(默认值),replica 和 local。设置此参数会导致丢弃先前缓存的任何查询计划。只有超级用户和具有适当 SET 权限的用户才能更改此设置。

这个设置的预期用途是由逻辑复制系统在应用所复制的更改时将它设置为 replica。其效果将是触发器和规则(没有对其默认配置做修改)在副本上将不会被触发。更多信息请参考 ALTER TABLE 的子句 ENABLE TRIGGER 以及 ENABLE RULE。

PostgreSQL 在内部会把设置 origin 和 local 同样对待。第三方复制系统可能会把这两个值用于其内部目的,例如把 local 用来标出一个不应复制其更改的会话。

因为外键被实现为触发器,将这个参数设置为 replica 还会禁用所有的外键检查,如果使用不当可能会让数据处于一种不一致的状态。

statement_timeout (integer) #

中止任何使用了超过指定时间量的语句。如果 log_min_error_statement 被设置为 ERROR 或更低,语句如果超时也会被记录。如果指定值时没有单位,则以毫秒为单位。一个零值(默认)将禁用超时。

超时从命令到达服务器时开始计算,直到服务器完成该命令为止。如果单个简单查询消息中出现多个 SQL 语句,超时将分别应用于每个语句。(PostgreSQL 13 之前的版本通常将超时应用于整个查询字符串。)在扩展查询协议中,当任何与查询相关的消息(Parse、Bind、Execute、Describe)到达时开始计时,并在处理完 Execute 或 Sync 消息时取消计时。

我们不推荐在 postgresql.conf 中设置 statement_timeout,因为它会影响所有会话。

lock_timeout (integer) #

如果任何语句在试图获取表、索引、行或其他数据库对象上的锁时等待超过指定的时间量,该语句将被中止。该时间限制独立地应用于每一次锁获取尝试。该限制会应用到显式锁定请求(如 LOCK TABLE 或不带 NOWAIT 的 SELECT FOR UPDATE)和隐式获得的锁。如果指定值时没有单位,则以毫秒为单位。一个零值(默认)将禁用超时。

与 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 亿个事务。尽管用户可以将该值设置在 0 到 20 亿之间,VACUUM 仍会悄悄将其有效值限制为不超过 autovacuum_freeze_max_age 的 95%,以便在针对该表启动防回卷自动清理之前,周期性手工 VACUUM 仍有机会运行。详见第 25.1.5 节。

vacuum_freeze_min_age (integer) #

指定 VACUUM 在决定是否冻结带有较旧 XID 的页面时应采用的截止年龄(以事务数计)。默认值为 5000 万个事务。尽管用户可以将该值设置在 0 到 10 亿之间,VACUUM 仍会悄悄将其有效值限制为不超过 autovacuum_freeze_max_age 的一半,以避免强制自动清理之间的间隔过短。详见第 25.1.5 节。

vacuum_failsafe_age (integer) #

指定表的 pg_class.relfrozenxid 字段在 VACUUM 采取非常措施以避免系统范围事务 ID 回卷失败之前所允许达到的最大年龄(以事务数计)。这是 VACUUM 的最后手段。失效保护通常会在为防止事务 ID 回卷而启动的自动清理已经运行一段时间后触发,但也可能在任何一次 VACUUM 期间触发。

当触发失效保护时,当前生效的任何基于代价的延迟都将不再应用,进一步的非关键维护任务(例如索引清理)会被跳过,并且正在使用的任何缓冲区访问策略都会被禁用,从而使 VACUUM 可以自由使用全部共享缓冲区。

默认值为 16 亿个事务。尽管用户可以将该值设置在 0 到 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。例如,这适用于通过 xmlelement 函数或 xmlforest 函数将 bytea 值转换到 XML 值。可能的值有 base64 和 hex,它们都是用 XML 模式标准定义的。默认值是 base64。更多关于 XML 相关函数的信息可参阅第 9.15 节。

这里的实际选择主要取决于偏好,只受客户端应用中可能存在的限制的约束。两种方法都支持所有可能的值,尽管十六进制编码会比 base64 编码略大。

xmloption (enum) #

设置在 XML 与字符串值之间进行转换时,隐含采用 DOCUMENT 还是 CONTENT。有关说明参见第 8.13 节。有效值是 DOCUMENT 和 CONTENT。默认值是 CONTENT。

根据 SQL 标准,设置这个选项的命令是:

SET XML OPTION { DOCUMENT | CONTENT };

这种语法在 PostgreSQL 也可用。

gin_pending_list_limit (integer) #

设置 fastupdate 被启用时可以使用的 GIN 索引的待处理列表的最大尺寸。如果该列表增长到超过这个最大尺寸,会通过批量将其中的项移入索引的主 GIN 数据结构来清理列表。如果指定值时没有单位,则以千字节为单位。默认值是四兆字节(4MB)。可以通过更改索引的存储参数来为个别 GIN 索引覆盖这个设置。更多信息请见第 70.4.1 节和第 70.5 节。

createrole_self_grant (string) #

如果一个拥有 CREATEROLE 但不拥有 SUPERUSER 权限的用户创建了角色,并且此选项被设置为非空值,则新创建的角色将以指定选项授予创建者。该值必须是 set、inherit 或它们的逗号分隔列表。默认值为空字符串,这会禁用此功能。

此选项的目的是允许非超级用户的 CREATEROLE 用户自动继承所创建用户的权限,或自动获得对这些用户执行 SET ROLE 的能力。由于 CREATEROLE 用户始终会隐式获得其所创建角色的 ADMIN OPTION,因此该用户总是可以通过执行 GRANT 语句达到相同效果,但自动授予在可用性上更方便。超级用户会自动继承每个角色的权限,并且始终可以对任何角色执行 SET ROLE;此设置可让 CREATEROLE 用户对其创建的用户获得类似的行为。

restrict_nonsystem_relation_kind (string) #

设置禁止访问非系统关系的关系类型。该值采用关系类型的逗号分隔列表形式。目前支持的关系类型是 view 和 foreign-table。

20.11.2. 区域设置和格式化 #

DateStyle (string) #

设置日期和时间值的显示格式,以及解释有歧义的日期输入值的规则。由于历史原因,这个变量包含两个独立的部分:输出格式声明(ISO、Postgres、SQL 或 German)、输入/输出的年/月/日顺序(DMY、MDY 或 YMD)。这些可以被独立设置或者一起设置。关键字 Euro 和 European 是 DMY 的同义词;关键字 US、NonEuro 和 NonEuropean 是 MDY 的同义词。详见第 8.5 节。内置默认值是 ISO, MDY,但是 initdb 将用对应于选中的 lc_time 区域设置行为的设置初始化配置文件。

IntervalStyle (enum) #

设置时间间隔值的显示格式。值 sql_standard 会生成符合 SQL 标准时间间隔字面量的输出。值 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) #

这个参数调整以文本形式输出浮点值时所用的位数,包括 float4,float8 以及几何数据类型。

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

如果值为零或负,则输出四舍五入为给定的十进制精度。所用精度以该类型的标准位数(根据类型使用 FLT_DIG 或 DBL_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 区域设置验证问题时使用何种消息严重级别报告该问题。有效值包括 DISABLED、DEBUG5、DEBUG4、DEBUG3、DEBUG2、DEBUG1、INFO、NOTICE、WARNING、ERROR 和 LOG。

如果设置为 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' 语法,其中的 XXX 是 pgsql、perl、tcl 或 python。

只有特别为与 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 命令的方式解析。项之间的空格会被忽略,如果需要在库名中包含空格或者逗号,请把库名放在双引号内。这个参数只能在服务器启动时设置。如果指定的库没有找到,服务器将无法启动。

有些库需要执行只能在 postmaster 启动时发生的特定操作,例如分配共享内存、保留轻量级锁或者启动后台工作者。这些库必须通过这个参数在服务器启动时载入。每个库的详情请见文档。

其他库也能被预载入。通过预载入一个共享库,当该库被第一次使用时就可以省去库的启动耗时。不过,启动每个新服务器进程的时间可能会略有增加,即使该进程从不使用该库。因此,推荐只把这个参数用于那些要在大多数会话中使用的库上。还有,改变这个参数要求重启服务器,因此对于短期的调试任务来说这不是好的选择,应该转用 session_preload_libraries。

注意

在 Windows 主机上,在服务器启动时预载入一个库并不会减少启动每个新服务器进程所需的时间;每一个服务器进程将会重新载入所有预载入的库。不过,对于那些要在 postmaster 启动时执行操作的库来说,Windows 主机上的 shared_preload_libraries 仍然有用。

jit_provider (string) #

这个变量是要被使用的 JIT 提供者库的名称(见第 32.4.2 节)。默认是 llvmjit。这个参数只能在服务器启动时设置。

如果这个变量被设置为一个不存在的库,JIT 将不可用,但是也不会发生错误。这种特性允许在主 PostgreSQL 包之外单独安装 JIT 支持。

20.11.4. 其他默认值 #

dynamic_library_path (string) #

如果需要打开一个可以动态装载的模块并且在 CREATE FUNCTION 或 LOAD 命令中指定的文件名没有目录部分(即名字中不包含斜线),那么系统将搜索这个路径以查找所需的文件。

参数 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 节。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题请通过上游文档表单反馈给 PostgreSQL 文档维护者。