20.11. 客户端连接默认值#
20.11.1. 语句行为#
client_min_messages
(枚举
) #控制哪些 消息级别 发送到客户端。有效值包括
DEBUG5
、DEBUG4
、DEBUG3
、DEBUG2
、DEBUG1
、LOG
、NOTICE
、WARNING
和ERROR
。每个级别都包括其后的所有级别。级别越靠后,发送的消息越少。默认值为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 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
) #此参数通常为 on。当设置为
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 语句,则超时时间将分别应用于每个语句。(13 版之前的 PostgreSQL 版本通常将超时时间应用于整个查询字符串。)在扩展查询协议中,超时时间从任何与查询相关的消息(解析、绑定、执行、描述)到达时开始计算,并在执行或同步消息完成时取消。
不建议在
postgresql.conf
中设置statement_timeout
,因为它会影响所有会话。lock_timeout
(integer
) #中止在尝试获取表、索引、行或其他数据库对象的锁时等待时间超过指定时间的任何语句。时间限制分别适用于每次获取锁的尝试。该限制既适用于显式锁定请求(例如
LOCK TABLE
或SELECT 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 中对二进制值进行编码。例如,当函数
xmlelement
或xmlforest
将bytea
值转换为 XML 时,此设置适用。可能的值为base64
和hex
,它们都在 XML Schema 标准中定义。默认值为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
) #设置 GIN 索引的待处理列表的最大大小,该列表在启用
fastupdate
时使用。如果列表增长超过此最大大小,则通过将其中的条目批量移动到索引的主 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
用户生成类似的行为,以供他们创建的用户使用。
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
将生成与 标准间隔文本相匹配的输出。值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
命令相同。条目之间的空格会被忽略;如果需要在名称中包含空格或逗号,请用双引号将库名称括起来。此参数只能在服务器启动时设置。如果找不到指定的库,服务器将无法启动。有些库需要执行某些操作,这些操作只能在启动后执行,例如分配共享内存、保留轻量级锁或启动后台工作进程。这些库必须通过此参数在服务器启动时加载。有关详细信息,请参阅每个库的文档。
其他库也可以预加载。通过预加载共享库,可以在首次使用库时避免库启动时间。但是,即使该进程从未使用该库,启动每个新服务器进程的时间也可能会略有增加。因此,此参数仅推荐用于大多数会话中将使用的库。此外,更改此参数需要重新启动服务器,因此这不是用于短期调试任务的正确设置。相反,请使用 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 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 节。