Postgresql 中文操作指南

20.11. Client Connection Defaults #

20.11.1. Statement Behavior #

  • client_min_messages (enum) #

    • 控制发送到客户端的 message levels。有效值为 DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOGNOTICEWARNING_和 _ERROR。每个级别都包括其后的所有级别。级别越高,发送的消息就越少。默认级别为 NOTICE。请注意,_LOG_在此的等级与在 log_min_messages中的不同。

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

  • search_path (string) #

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

    • search_path 的值必须是以逗号分隔的模式名称列表。任何非现有模式或用户不具有 USAGE 权限的模式名称都会被忽略。

    • 如果列表项之一是特殊名称 $user,那么如果存在这样的模式且用户有 USAGE 权限,则将替换具有 CURRENT_USER 返回的名称的模式。(如果不存在,则将忽略 $user)。

    • 无论系统目录模式 pg_catalog 是否在路径中提及,都将始终对其进行搜索。如果在路径中提及,则会按指定顺序对其进行搜索。如果路径中没有 pg_catalog,则将在 before 中搜索其任何路径项。

    • pg_temp_nnn, is always searched if it exists. It can be explicitly listed in the path by using the alias pg_temp ,即当前会话的临时表 schema 相同。如果 path 中未列出此 schema,则会首先搜索此 schema(甚至在 pg_catalog 之前)。但是,只会在临时 schema 中搜索相关性(表格、视图、序列等)和数据类型名称。绝不会在此 schema 中搜索函数或运算符名称。

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

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

    • 有关架构处理的更多信息,请参见 Section 5.9。特别是,默认配置仅适用于数据库具有单个用户或少数相互信任的用户的情况。

    • 可以通过 SQL 函数 _current_schemas_检查搜索路径的当前有效值(请参见 Section 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 从那时起已更改。

    • 有关表空间的更多信息,请参见 Section 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 中设定的值时适用该规则。

    • 默认值为空字符串,这意味着所有临时对象都将创建在当前数据库的默认表空间中。

    • See also default_tablespace.

  • check_function_bodies (boolean) #

    • 此参数通常为 on。如果设为 off ,则它将在 CREATE FUNCTIONCREATE PROCEDURE 期间禁用例程正文字符串验证。禁用验证可避免验证过程的副作用,特别是防止由于前向引用等问题而导致误报。在代表其他用户加载函数之前,请将此参数设置为 off ;pg_dump 将自动执行此操作。

  • default_transaction_isolation (enum) #

    • 每个 SQL 事务都有一个隔离级别,该级别可以是“Read Uncommitted”、“Read Committed”、“Repeatable Read”或“Serializable”。此参数控制每个新事务的默认隔离级别。默认值为“Read Committed”。

    • 有关更多信息,请查阅 Chapter 13SET TRANSACTION

  • default_transaction_read_only (boolean) #

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

    • 有关更多信息,请查阅 SET TRANSACTION

  • default_transaction_deferrable (boolean) #

    • serializable 未隔离级别运行时,可延迟可延迟的只读 SQL 事务,直到允许其继续执行为止。但是,一旦它开始执行,就不会产生任何为了确保可序列化的开销;因此,序列化代码将不会因为它同时更新的原因而强制它中止,从而使该选项适合长时间运行的只读事务。

    • 此参数控制每个新事务的默认可延迟的状态。它当前不会对读写事务或在低于 serializable 的隔离级别运行的事务产生任何影响。默认值为 off

    • 有关更多信息,请查阅 SET TRANSACTION

  • transaction_isolation (enum) #

  • transaction_read_only (boolean) #

  • transaction_deferrable (boolean) #

  • 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) #

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

    • 此选项可用于确保空闲会话不会在不合理的时间内保持锁定。即使没有持有任何重大锁定,打开的事务也会阻止清理可能仅对该事务可见的近期死亡元组;因此,长期保持空闲会造成表格膨胀。有关详细信息,请参见 Section 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 有机会运行。有关更多信息,请参阅 Section 25.1.5

  • vacuum_freeze_min_age (integer) #

    • 指定 _VACUUM_应使用此临界年龄(以事务为单位),以决定是否触发冻结具有较旧 XID 的页面。默认是 5000 万个事务。虽然用户可将此值设定在零至十亿之间的任意位置,但 _VACUUM_会无提示将有效值限制为 autovacuum_freeze_max_age值的一半,以免强制自动真空清理之间间隔过短。有关详细信息,请参见 Section 25.1.5.。

  • vacuum_failsafe_age (integer) #

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

    • 一旦防故障被触发,任何正在生效的基于成本的延迟都将不再被应用,进一步的非必需维护任务(例如索引 vacuum)都会被绕过,并且正在使用的任何 [role="bare"]glossary.html#GLOSSARY-BUFFER-ACCESS-STRATEGY Buffer Access Strategy 都将被禁用,从而导致 VACUUM 可以自由地使用全部 [role="bare"]glossary.html#GLOSSARY-SHARED-MEMORY shared buffers

    • 默认是 16 亿个事务。虽然用户可将此值设定在零至 21 亿之间的任意位置,但 _VACUUM_会无提示将有效值调整为不低于 autovacuum_freeze_max_age的 105%。

  • vacuum_multixact_freeze_table_age (integer) #

    • 如果表的 pg_class . relminmxid 字段已达到此设置指定的天数,则 VACUUM 将执行一次激进扫描。激进扫描不同于常规 VACUUM ,因为它将访问可能包含未冻结的 XID 或 MXID 的每一页,而不仅仅是可能包含死元组的那些。默认值是 1.5 亿个 multixact。虽然用户可以将此值设置为介于零到二十亿的任意值,但 VACUUM 会自动将有效值限制为 autovacuum_multixact_freeze_max_age 的 95%,以便定期手动 VACUUM 有机会在针对表的防环绕措施启动之前运行。有关更多信息,请参阅 Section 25.1.5.1

  • vacuum_multixact_freeze_min_age (integer) #

    • 指定 _VACUUM_应使用此临界年龄(以多事务为单位),以决定是否触发冻结具有较旧多事务 ID 的页面。默认是 500 万个多事务。虽然用户可将此值设定在零至十亿之间的任意位置,但 _VACUUM_会无提示将有效值限制为 autovacuum_multixact_freeze_max_age值的一半,以免强制自动真空清理之间间隔过短。有关详细信息,请参见 Section 25.1.5.1.。

  • vacuum_multixact_failsafe_age (integer) #

    • 指定在 VACUUM 采取非常规措施以避免系统级 multixact ID 环绕故障之前,表的 pg_class . relminmxid 字段所能达到的最大天数(以 multixact 为单位)。这是 VACUUM 的最后手段策略。当防止事务 ID 环绕的自动清理已经运行一段时间时,故障保护通常会触发,尽管故障保护有可能在任何 VACUUM 期间触发。

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

    • 默认是 16 亿个多事务。虽然用户可将此值设定在零至 21 亿之间的任意位置,但 _VACUUM_会无提示将有效值调整为不低于 autovacuum_multixact_freeze_max_age的 105%。

  • bytea_output (enum) #

    • 设置类型为 bytea_的值输出格式。有效值包括 _hex(默认值)和 escape(传统 PostgreSQL 格式)。有关详细信息,请参见 Section 8.4.。无论此设置如何,_bytea_类型在作为输入时始终接受两种格式。

  • xmlbinary (enum) #

    • 设置二进制值在 XML 中的编码方式。例如在 bytea_值通过函数 _xmlelement_或 _xmlforest_转换到 XML 时,这便会生效。可能的值有 _base64_和 _hex,它们在 XML Schema 标准中均有定义。默认是 base64。有关 XML 相关函数的进一步信息,请参见 Section 9.15.。

    • 此处的实际选择主要是口味问题,仅受客户端应用程序中可能的限制约束。尽管十六进制编码将比 base64 编码稍大,但两种方法都支持所有可能的值。

  • xmloption (enum) #

    • 设置在 XML 和字符字符串值间进行转换时,DOCUMENT_或 _CONTENT_是否隐含。有关此的说明,请参见 Section 8.13.。有效值包括 _DOCUMENT_和 _CONTENT。默认是 CONTENT

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

SET XML OPTION { DOCUMENT | CONTENT };
  • PostgreSQL 中也提供了此语法。

    • gin_pending_list_limit (integer) #

  • 设置启用 fastupdate 时使用的 GIN 索引挂起列表的最大大小。如果列表增长超过此最大大小,则通过批量移动其中的条目到索引的 GIN 主数据结构中来对其进行清理。如果未指定此值,则将其视为千字节。默认值是四兆字节( 4MB )。可以通过更改索引存储参数来覆盖各个 GIN 索引的此设置。有关更多信息,请参阅 Section 70.4.1Section 70.5

    • createrole_self_grant (string) #

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

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

20.11.2. Locale and Formatting #

  • DateStyle (string) #

    • 设置日期和时间值的显示格式,以及用于解释模棱两可的日期输入值的规则。由于历史原因,此变量包含两个独立的组件:输出格式规范 (ISOPostgresSQL_或 _German),和年/月/日顺序的输入/输出规范 (DMYMDY_或 _YMD)。这些可以单独或一起设置。关键字 Euro_和 _European_是 _DMY_的同义词; 关键字 _USNonEuro_和 _NonEuropean_是 _MDY_的同义词。有关详细信息,请参见 Section 8.5.。内置默认值是 _ISO, MDY,但 initdb 会使用对应于已选中 _lc_time_区域设置的行为设置,初始化配置文件。

  • IntervalStyle (enum) #

    • 设置区间值的显示格式。值 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 参数也会影响对具有歧义的时间间隔输入的解释。有关更多信息,请参阅 Section 8.5.4

  • TimeZone (string) #

    • 设置用于显示和解释时间戳的时区。内置默认值为 GMT,但在 postgresql.conf 中通常会被覆盖;initdb 将在那里安装一个与系统环境相对应的设置。有关更多信息,请参阅 Section 8.5.3

  • timezone_abbreviations (string) #

    • 设置服务器接受的用于 datetime 输入的时区缩写集合。默认值为 'Default',这是一个在世界各地的大部分地区都能使用的集合;还有 'Australia''India',并且可以为特定安装定义其他集合。有关更多信息,请参阅 Section B.4

  • extra_float_digits (integer) #

    • 此参数调整浮点数值(包括 float4float8 和几何数据类型)的文本输出中使用的位数。

    • 如果值为 1(默认值)或以上,则 float 值将以最短精确格式输出;请参阅 Section 8.1.3。生成的确切数字取决于输出值,而不取决于此参数的值。float8 值最多需要 17 位数字,float4 值最多需要 9 位数字。此格式既快速又精确,在正确读取时准确保留原始二进制浮点数。为了与历史兼容,允许的值高达 3。

    • 如果值为 0 或负数,则输出将舍入到给定的十进制精度。使用的精度是类型的标准位数(根据具体情况为 FLT_DIGDBL_DIG),按照此参数的值(例如,指定 -1 将导致 float4 值输出为舍入到 5 个有效数字,float8 值舍入到 14 个数字。)此格式较慢,并且不会保留二进制浮点数值的所有位,但可能更易于理解。

  • client_encoding (string) #

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

  • lc_messages (string) #

    • 设置消息显示的语言。可接受的值因系统而异;有关更多信息,请参阅 Section 24.1。如果此变量设置为空字符串(这是默认值),则值会以与系统相关的某种方式从服务器的执行环境中继承。

    • 在某些系统上,此区域设置不存在。设置此变量仍将起作用,但不会产生任何效果。此外,也有可能不存在目标语言的已翻译消息。在这种情况下,您将继续看到英文消息。

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

  • lc_monetary (string) #

    • 设置用于设置货币金额格式的区域设置,例如使用 to_char 函数系列。可接受的值因系统而异;有关更多信息,请参阅 Section 24.1。如果此变量设置为空字符串(这是默认值),则值会以与系统相关的某种方式从服务器的执行环境中继承。

  • lc_numeric (string) #

    • 设置用于设置数字格式的区域设置,例如使用 to_char 函数系列。可接受的值因系统而异;有关更多信息,请参阅 Section 24.1。如果此变量设置为空字符串(这是默认值),则值会以与系统相关的某种方式从服务器的执行环境中继承。

  • lc_time (string) #

    • 设置用于设置日期和时间格式的区域设置,例如通过 to_char 函数系列。可接受的值因系统而异;有关更多信息,请参阅 Section 24.1。如果此变量设置为一个空字符串(这是默认值),则该值将以与系统相关的方式从服务器的执行环境继承。

  • icu_validation_level (enum) #

    • 在遇到 ICU 区域设置验证问题时,控制用于报告该问题的 message level。有效值包括 DISABLEDDEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORLOG

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

  • default_text_search_config (string) #

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

Note

此参数的含义及其默认值在 PostgreSQL 12 中发生变化;有关进一步讨论,请参见 Section 8.1.3

20.11.3. Shared Library Preloading #

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

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

只有专门用于与 PostgreSQL 一起使用的共享库才能以这种方式加载。每个 PostgreSQL 支持的库都有一个“magic block”,用于检查以确保兼容性。因此,无法以这种方式加载非 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

  • jit_provider (string) #

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

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

Note

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

20.11.4. Other Defaults #

  • dynamic_library_path (string) #

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

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