2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

19.11. 客户端连接默认值 #

19.11.1. 语句行为 #

client_min_messages (枚举) #

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

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

search_path (字符串) #

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

search_path 的值必须是模式名称的逗号分隔列表。任何不是现有模式的名称,或者用户没有 USAGE 权限的模式,都会被静默忽略。

如果列表项之一是特殊名称 $user,则如果存在这样的模式并且用户对其具有 USAGE 权限,则会替换由 CURRENT_USER 返回的名称的模式。(如果没有,则忽略 $user。)

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

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

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

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

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

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

row_security (布尔型) #

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

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

default_table_access_method (字符串) #

此参数指定在创建表或物化视图时要使用的默认表访问方法,前提是 CREATE 命令未显式指定访问方法,或者使用 SELECT ... INTO 时,它不允许指定表访问方法。默认值为 heap

default_tablespace (字符串) #

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

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

此变量不用于临时表;对于它们,将改为咨询temp_tablespaces

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

如果在创建分区表时将此参数设置为除空字符串以外的值,则分区表的表空间将设置为该值,该值将用作将来创建的分区的默认表空间,即使 default_tablespace 从那时起发生了更改。

有关表空间的更多信息,请参见第 22.6 节

default_toast_compression (枚举) #

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

temp_tablespaces (字符串) #

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

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

temp_tablespaces以交互方式设置时,指定不存在的表空间是一个错误,指定用户没有CREATE权限的表空间也是一个错误。但是,当使用先前设置的值时,不存在的表空间会被忽略,用户缺乏CREATE权限的表空间也会被忽略。特别是,此规则适用于在postgresql.conf中设置的值。

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

另请参阅default_tablespace

check_function_bodies (boolean) #

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

default_transaction_isolation (enum) #

每个SQL事务都有一个隔离级别,可以是read uncommittedread committedrepeatable readserializable。此参数控制每个新事务的默认隔离级别。默认为read committed

请参阅第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版本通常将超时视为应用于整个查询字符串。)在扩展查询协议中,超时从任何与查询相关的消息(Parse、Bind、Execute、Describe)到达时开始运行,并通过完成Execute或Sync消息来取消。

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

transaction_timeout (integer) #

终止任何在事务中持续时间超过指定时间量的会话。此限制既适用于显式事务(使用BEGIN启动)也适用于与单个语句相对应隐式启动的事务。如果此值在没有单位的情况下指定,则将其视为毫秒。值为零(默认值)禁用超时。

如果transaction_timeout短于或等于idle_in_transaction_session_timeoutstatement_timeout,则忽略较长的超时。

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

注意

已准备的事务不受此超时限制。

lock_timeout (integer) #

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

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

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

idle_in_transaction_session_timeout (integer) #

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

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

idle_session_timeout (integer) #

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

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

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

vacuum_freeze_table_age (integer) #

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

vacuum_freeze_min_age (integer) #

指定VACUUM用于决定是否触发冻结具有较旧XID的页面的截止年龄(以事务为单位)。默认值为5000万个事务。尽管用户可以将此值设置为从零到十亿的任何值,但VACUUM会将有效值静默限制为autovacuum_freeze_max_age值的一半,以确保强制自动VACUUM之间的时间不会过短。有关更多信息,请参见第 24.1.5 节

vacuum_failsafe_age (integer) #

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

当触发故障保护时,任何生效的基于成本的延迟将不再应用,进一步的非必要维护任务(例如索引VACUUM)将被绕过,并且任何缓冲区访问策略的使用将被禁用,从而使VACUUM可以自由地使用所有共享缓冲区

默认值为16亿个事务。尽管用户可以将此值设置为从零到21亿的任何值,但VACUUM会将有效值静默调整为不少于autovacuum_freeze_max_age的105%。

vacuum_multixact_freeze_table_age (integer) #

VACUUM如果表的pg_class.relminmxid字段已达到此设置指定的时间,则执行积极扫描。积极扫描与常规VACUUM的不同之处在于,它访问可能包含未冻结XID或MXID的每个页面,而不仅仅是那些可能包含死元组的页面。默认值为1.5亿个多事务。尽管用户可以将此值设置为从零到二十亿的任何值,但VACUUM会将有效值静默限制为autovacuum_multixact_freeze_max_age的95%,以便定期手动VACUUM有机会在为表启动反回绕之前运行。有关更多信息,请参见第 24.1.5.1 节

vacuum_multixact_freeze_min_age (integer) #

指定VACUUM用于决定是否触发冻结具有较旧多事务ID的页面的截止年龄(以多事务为单位)。默认值为500万个多事务。尽管用户可以将此值设置为从零到十亿的任何值,但VACUUM会将有效值静默限制为autovacuum_multixact_freeze_max_age值的一半,以确保强制自动VACUUM之间的时间不会过短。有关更多信息,请参见第 24.1.5.1 节

vacuum_multixact_failsafe_age (integer) #

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

当触发故障保护时,任何生效的基于成本的延迟将不再应用,并且进一步的非必要维护任务(例如索引VACUUM)将被绕过。

默认值为16亿个多事务。尽管用户可以将此值设置为从零到21亿的任何值,但VACUUM会将有效值静默调整为不少于autovacuum_multixact_freeze_max_age的105%。

bytea_output (enum) #

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

xmlbinary (enum) #

设置如何在XML中编码二进制值。例如,当bytea值由函数xmlelementxmlforest转换为XML时,这将适用。可能的值为base64hex,它们都在XML模式标准中定义。默认值为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(4MB)。可以通过更改索引存储参数来覆盖此设置以用于各个GIN索引。有关更多信息,请参见第 64.4.4.1 节第 64.4.5 节

createrole_self_grant (string) #

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

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

event_triggers (布尔型) #

允许临时禁用事件触发器的执行,以便对有故障的事件触发器进行故障排除和修复。将该参数设置为 false 将禁用所有事件触发器。将其设置为 true 则允许所有事件触发器触发,这是默认值。只有超级用户和拥有相应 SET 权限的用户才能更改此设置。

restrict_nonsystem_relation_kind (字符串型) #

设置禁止访问非系统关系的各种关系类型。该值采用逗号分隔的关系类型列表形式。目前,支持的关系类型有 viewforeign-table

19.11.2. 区域设置和格式 #

DateStyle (字符串型) #

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

IntervalStyle (枚举型) #

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

IntervalStyle 参数也会影响对模糊区间输入的解释。有关更多信息,请参见第 8.5.4 节

TimeZone (字符串型) #

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

timezone_abbreviations (字符串型) #

设置服务器将为日期时间输入接受的时间区域缩写集合。默认为 'Default',这是一个在世界大部分地区都能正常工作的集合;还有 'Australia''India',并且可以为特定安装定义其他集合。有关更多信息,请参见第 B.4 节

extra_float_digits (整型) #

此参数调整用于浮点数(包括 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 (字符串型) #

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

lc_messages (字符串型) #

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

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

只有超级用户和拥有相应 SET 权限的用户才能更改此设置。

lc_monetary (字符串型) #

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

lc_numeric (字符串型) #

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

lc_time (字符串型) #

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

icu_validation_level (枚举型) #

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

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

default_text_search_config (字符串型) #

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

19.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 命令进行解释。条目之间的空格将被忽略;如果需要在名称中包含空格或逗号,请用双引号将库名称括起来。此参数只能在服务器启动时设置。如果未找到指定的库,则服务器将无法启动。

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

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

注意

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

jit_provider (string) #

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

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

19.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 索引扫描返回的集合大小的软上限。有关更多信息,请参阅 第 64.4.5 节

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表单 报告文档问题。