client_min_messages
(enum
) #控制哪些 消息级别 会发送到客户端。有效值包括 DEBUG5
、DEBUG4
、DEBUG3
、DEBUG2
、DEBUG1
、LOG
、NOTICE
、WARNING
和 ERROR
。每个级别都包括其后续的所有级别。级别越靠后,发送的信息就越少。默认值为 NOTICE
。请注意,LOG
在此处的等级不同于 log_min_messages 中的等级。
INFO 级消息始终发送到客户端。
search_path
(string
) #此变量指定在通过未指定架构的简单名称引用对象(表、数据类型、函数等)时搜索架构的顺序。当不同架构中的对象具有相同名称时,将使用搜索路径中首先找到的那个对象。如果对象不在搜索路径中的任何架构中,则只能通过使用限定(带点)名称指定其包含架构来引用该对象。
搜索路径的值必须是架构名称的逗号分隔列表。对于任何不存在的架构的名称,或者是对用户不具有 USAGE
权限的架构的名称,都会被忽略。
如果列表中的某个项目是特殊名称 $user
,则会代入由 CURRENT_USER
返回的名称的架构,如果存在此架构并且用户对该架构具有 USAGE
权限。(如果不存在,$user
会被忽略。)
无论系统目录架构 pg_catalog
是否在路径中提及,此架构始终都会被搜索。如果在路径中提及,则会按照指定的顺序进行搜索。如果路径中没有 pg_catalog
,则会在搜索路径中的任何项目 之前 先搜索此架构。
同样,当前会话的临时表架构,pg_temp_
,如果存在,将始终被搜索。它可以通过使用别名nnn
pg_temp
显式列在路径中。如果它未列在路径中,则将首先对其进行搜索(甚至在pg_catalog
之前)。但是,仅对关系(表、视图、序列等)和数据类型名称搜索临时架构。它永远不会搜索函数或运算符名称。
在未指定特定目标架构的情况下创建对象时,它们将放置在search_path
中命名的第一个有效架构中。如果搜索路径为空,则会报告错误。
此参数的默认值是"$user", public
。此设置支持数据库的共享使用(其中没有用户拥有私有架构,并且所有用户共享public
的使用),以用户为单位的私有架构,以及这些架构的组合。可以通过全局或以用户为单位更改默认搜索路径设置来获得其他效果。
有关架构处理的更多信息,请参见第 5.10 节。尤其是,只有当数据库只有一个用户或几个相互信任的用户时,默认配置才适合。
可以通过以下方式检查 search path 的当前有效值:SQL函数current_schemas
(参见第 9.27 节)。这与检查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
发生改变。
有关表空间的更多信息,请参阅第 22.6 节。
default_toast_compression
(enum
) #此变量设置可压缩列值 TOAST 的默认压缩方法。(可以在 CREATE TABLE
或 ALTER TABLE
中通过设置 COMPRESSION
列选项对各个列进行覆盖。)支持的压缩方法有 pglz
和(如果 PostgreSQL 是通过 --with-lz4
编译)lz4
。默认值为 pglz
。
temp_tablespaces
(string
) #此变量指定了在 CREATE
命令未明确指定表空间时可以创建临时对象(temp tables 及其索引)的表空间。用于对大型数据集进行排序等目的的临时文件也会在这些表空间中创建。
值是表空间名称列表。当列表中有多个名称时,每次创建临时对象时,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
) #在以 可序列化
隔离级别运行时,可延迟可延迟的只读 SQL 事务,然后再允许其继续。然而,一旦它开始执行,就不会发生任何确保可串行化的开销;因此,串行化代码没有任何理由强制它因并发更新而中止,这使得此选项适合于长时间运行的只读事务。
此参数控制每个新事务的默认可延迟状态。它目前对读/写事务或在低于 可序列化
的隔离级别下运行的事务没有影响。默认值为 off
。
如需了解更多信息,请参阅 SET TRANSACTION。
transaction_isolation
(enum
) #此参数反映了当前事务的隔离级别。在每个事务开始时,将其设置为 default_transaction_isolation 当前值。任何后续尝试更改它相当于 SET TRANSACTION 命令。
transaction_read_only
(boolean
) #此参数反应当前交易的只读状态。在每个交易的开始,它都设置为 default_transaction_read_only 的当前值。随后的任何尝试改变它都相当于一个 SET TRANSACTION 命令。
transaction_deferrable
(布尔值
) #此参数反应当前交易的可延期状态。在每个交易的开始,它都设置为 default_transaction_deferrable 的当前值。随后的任何尝试改变它都相当于一个 SET TRANSACTION 命令。
session_replication_role
(枚举
) #控制当前会话中触发器和复制相关规则的触发。可能的值是 origin
(默认值)、replica
和 local
。设置此参数会丢弃先前所有缓存的查询计划。只有超级用户和有合适的 SET
权限的用户才能更改此设置。
此设置的预期用途是:当逻辑复制系统应用复制的改动时,它们将此设置为 replica
。这样做的效果是:触发器和规则(那些未被更改过默认配置的)将不会触发副本。请参阅 ALTER TABLE
从句 ENABLE TRIGGER
和 ENABLE RULE
以了解更多信息。
PostgreSQL 在内部以相同的方式处理 origin
和 local
设置。第三方复制系统可能出于内部目的使用这两个值,例如使用 local
指定不应复制其更改的会话。
由于外键是作为触发器实现的,将此参数设置为 replica
也将禁用所有外键检查,如果使用不当,可能会使数据处于不一致状态。
statement_timeout
(整数
) #中止花费时间超出指定时间量的任何语句。如果将 log_min_error_statement
设为 ERROR
或更低,也将记录超时语句。如果未指定单位,则视为毫秒。零值(默认值)将禁用超时。
该超时时间从命令到达服务器开始,直到服务器完成该命令。如果在单个简单的查询信息中出现多条 SQL 语句,则超时将分别应用于每条语句。(在 13 版之前的 PostgreSQL 版本中,超时通常视为应用于整个查询字符串。)在扩展查询协议中,当任何与查询相关的消息(解析、绑定、执行、描述)到达时,超时就开始运行,并且由执行或同步消息完成时取消。
不建议在 postgresql.conf
中设置 statement_timeout
,因为它会影响所有会话。
transaction_timeout
(integer
) #中止在事务中跨越指定时间量的任何会话。限制既适用于显式事务(以 BEGIN
开始),也适用于对应于单个语句的隐式启动的事务。如果未指定单位,则视为毫秒。零值(默认值)将禁用超时。
如果 transaction_timeout
短于或等于 idle_in_transaction_session_timeout
或 statement_timeout
,则将忽略较长的超时。
不建议在 postgresql.conf
中设置 transaction_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
) #终止在开启的事务中空闲(即,等待客户端查询)超过指定时间量的任何会话。如果没有指定单位,则此值将被视为毫秒。值零(默认值)禁用超时。
此选项可用于确保空闲会话不会长时间持有锁。即使没有持有任何重要锁,已开启的事务也会阻止清理最近死亡,并且可能仅对此事务可见的元组;因此,长时间保持空闲会导致表膨胀。请参阅 第 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 亿笔事务。虽然用户可以设置该值在 0 到 20 亿之间的任意值,但 VACUUM
会静默地将有效值限制为 autovacuum_freeze_max_age 的 95%,以便定期手动 VACUUM
有机会在启动针对该表的反环绕自动清理之前运行。有关更多信息,请参阅 第 24.1.5 节。
vacuum_freeze_min_age
(integer
) #指定 VACUUM
应该使用的截止时间(以事务为单位)来决定是否触发对具有较旧 XID 的页面的冻结。默认值为 5000 万笔事务。虽然用户可以设置该值在 0 到 10 亿之间的任意值,但 VACUUM
会静默地将有效值限制为 autovacuum_freeze_max_age 值的一半,以便在强制自动清理之间的时间不是过短。有关更多信息,请参阅 第 24.1.5 节。
vacuum_failsafe_age
(integer
) #指定表的 pg_class
.relfrozenxid
字段在 VACUUM
采取非常措施以避免系统范围的事务 ID 环绕故障之前可达到的最大时间(以事务为单位)。这是 VACUUM
的最后策略。虽然也有可能在 VACUUM
期间触发此故障,但通常在已运行过一段时间以防止发生事务 ID 环绕的自动清理时才会触发此故障。
触发故障时,将不再应用任何有效的基于成本的延迟,会绕过其他非必要的维护任务(例如索引清理),并且会停用使用中的任何 缓冲区访问策略,从而使 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
有机会运行。有关详细信息,请参阅 第 24.1.5.1 节。
vacuum_multixact_freeze_min_age
(integer
) #指定 VACUUM
应使用的截止时间(以多事务为单位),以决定是否触发对具有较旧多事务 ID 的页进行冻结。默认值为 500 万个多事务。尽管用户可以将此值设置为从 0 到 10 亿间的任何值,但 VACUUM
会在不提示的情况下将有效值限制为 autovacuum_multixact_freeze_max_age 值的一半,以便强制自动真空之间的不可理喻的短时间。有关详细信息,请参阅 第 24.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 编码二进制值的方式。例如,当 bytea
值被函数 xmlelement
或 xmlforest
转换为 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 索引覆盖此设置。有关更多信息,请参见 第 64.4.4.1 节 和 第 64.4.5 节。
createrole_self_grant
(string
) #如果具有 CREATEROLE
但没有 SUPERUSER
的用户创建了一个角色,并且此项已设为非空值,则将使用所指定的选项向创建用户授予新创建的角色。值必须是 set
、inherit
或这两个值的以逗号分隔的列表。默认值为空字符串,会禁用此功能。
此选项的目的是允许一个不是超级用户的 CREATEROLE
用户自动继承或自动获得向所有创建的用户 SET ROLE
的能力。由于 CREATEROLE
用户始终隐式授予对其创建角色的 ADMIN OPTION
,该用户始终可以执行一个 GRANT
语句,该语句将产生与此设置相同的效果。然而,出于可用性原因,如果授权自动进行,则会十分方便。超级用户自动继承每个角色的特权,并且始终可以 SET ROLE
到任何角色,此设置可用于为 CREATEROLE
用户针对其创建的用户生成类似的行为。
event_triggers
(boolean
) #允许暂时禁用事件触发器的执行,以便对有故障的事件触发器进行故障排除和修复。通过将所有事件触发器设置为 false
将禁用所有事件触发器。将值设置为 true
允许触发所有事件触发器,这是默认值。只有超级用户和具有适当 SET
特权的用户才能更改此设置。
restrict_nonsystem_relation_kind
(string
) #设置禁止访问非系统关系的关系种类。该值采用用逗号分隔的关系种类的格式。目前,受支持的关系种类有 view
和 foreign-table
。
DateStyle
(string
) #设置日期和时间值的显示格式以及解释有歧义的日期输入值规则。由于历史原因,此变量包括两个独立组成部分:输出格式规范(ISO
、Postgres
、SQL
或 German
)和年/月/日排列的输入/输出规范 (DMY
、MDY
或 YMD
)。它们可以分别或一起设置。关键字 Euro
和 European
是 DMY
的同义词;US
、NonEuro
和 NonEuropean
是 MDY
的同义词。有关详细信息,请参阅 第 8.5 节。内置默认值是 ISO, MDY
,但 initdb 会使用对应于所选 lc_time
本地设置的行为的设置来初始化配置文件。
IntervalStyle
(枚举
) #设置间隔值的显示格式。值 sql_standard
会生成与匹配SQL标准间隔文字。值 postgres
(它是默认值)会生成与在将 DateStyle 参数设置为 ISO
的 8.4 版本之前的 PostgreSQL 发行版匹配的输出。值 postgres_verbose
会生成与在将 DateStyle
参数设置为非 ISO
输出的 8.4 版本之前的 PostgreSQL 发行版匹配的输出。值 iso_8601
会生成与 ISO 8601 的 4.4.3.2 部分中定义的带指示符的时间间隔 “格式” 匹配的输出。
IntervalStyle
参数还会影响对有歧义间隔输入的解释。有关详细信息,请参阅 第 8.5.4 节。
TimeZone
(string
) #设置用于显示和解释时间戳的时间区。内置默认值是 GMT
,但通常在 postgresql.conf
中会将其覆盖;initdb 会在那里安装与它的系统环境对应的设置。有关详细信息,请参阅 第 8.5.3 节。
timezone_abbreviations
(string
) #设置服务器用于 datetime 输入接受的时间缩写集合。默认值为 'Default'
,即可以在全球大部分地区使用的集合;还有 'Australia'
和 'India'
,还可以为特定安装定义其他的集合。有关更多信息,请参见 第 B.4 节。
extra_float_digits
(integer
) #此参数调整用于浮点值的文本输出(包括 float4
、float8
和几何数据类型)的数字个数。
如果此值为 1(默认值)或以上,则 float 值以精确的短格式输出;请参见 第 8.1.3 节。生成的实际数字个数仅取决于输出的值,而不取决于此参数的值。对于 float8
值至多需要 17 个数字,对于 float4
值至多需要 9 个。此格式既快速又精确,在正确读取时准确地保留原始二进制浮点值。为了达到历史兼容性,允许将此值指定为至多 3。
如果此值为 0 或负值,则按给定的十进制精度计算舍入结果。使用的精度是由于此参数的值而降低的该类型的标准数字个数(FLT_DIG
或 DBL_DIG
,取决于此参数的值)。(例如,指定 -1 将导致 float4
值以 5 个显著数字进行舍入输出,而 float8
值则以 14 个数字进行舍入输出。)此格式较慢且并未保留二进制浮点值的所有位,但可读性可能更好。
此参数的含义及其默认值在 PostgreSQL 12 中发生了更改;如需进一步讨论,请参见 第 8.1.3 节。
client_encoding
(string
) #设置客户端的编码(字符集)。默认使用数据库编码。有关PostgreSQL服务器支持的字符集,请参见第 23.3.1 节。
lc_messages
(string
) #设置要显示消息的语言。可接受的值因系统而异;有关详细信息,请参见第 23.1 节。如果此变量设置为空字符串(默认为空字符串),则会以系统相关的方式从服务器的执行环境继承值。
在某些系统上,此语言环境类别不存在。设置此变量仍然有效,但不会产生任何影响。此外,可能不存在所需的语言的翻译消息。在这种情况下,您将继续看到英文消息。
只有超级用户和具有相应SET
权限的用户才能更改此设置。
lc_monetary
(string
) #设置用于设置货币金额格式的语言环境,例如将该货币金额格式设置为to_char
函数系列。可接受的值因系统而异;有关详细信息,请参见第 23.1 节。如果此变量设置为空字符串(默认为空字符串),则会以系统相关的方式从服务器的执行环境继承值。
lc_numeric
(string
) #设置用于设置数字格式的语言环境,例如将该数字格式设置为to_char
函数系列。可接受的值因系统而异;有关详细信息,请参见第 23.1 节。如果此变量设置为空字符串(默认为空字符串),则会以系统相关的方式从服务器的执行环境继承值。
lc_time
(string
) #设置用于设置日期和时间的格式的语言环境,例如将该语言环境设置为to_char
函数系列。可接受的值因系统而异;有关详细信息,请参见第 23.1 节。如果此变量设置为空字符串(默认为空字符串),则会以系统相关的方式从服务器的执行环境继承值。
icu_validation_level
(枚举
) #当遇到 ICU 地区设置验证问题时,控件会使用某个 消息级别 来报告问题。有效值为 DISABLED
、DEBUG5
、DEBUG4
、DEBUG3
、DEBUG2
、DEBUG1
、INFO
、NOTICE
、WARNING
、ERROR
和 LOG
。
如果设置为 DISABLED
,则根本不报告验证问题。否则,会以给定的消息级别报告问题。默认值为 WARNING
。
default_text_search_config
(字符串
) #选择文本搜索配置,该配置由没有指定配置的明确参数的文本搜索函数的那些变体使用。有关详细信息,请参见 第 12 章。内置默认值为 pg_catalog.simple
,但 initdb 会初始化配置文件,其设置与选定的 lc_ctype
地区设置相对应(如果可以识别与该地区设置相匹配的配置)。
有若干设置可用于将共享库预加载到服务器中,以加载其他功能或实现性能优势。例如,设置 $libdir/mylib
会导致从安装的标准库目录中预加载 mylib.so
(或在某些平台上为 mylib.sl
)。这些设置之间的差别在于它们何时生效以及更改它们需要哪些权限。
PostgreSQL 程序语言库可以通过这种方式预加载,通常使用语法 $libdir/plXXX
,其中 XXX
是 pgsql
、perl
、tcl
或 python
。
只有专门用于与 PostgreSQL 搭配使用的共享库才可通过这种方式加载。每个由 PostgreSQL 支持的库都具有一个““魔术块””,该块经过检查以保证兼容性。因此,非 PostgreSQL 库无法通过这种方式加载。您可能能够为此使用操作系统设施,如 LD_PRELOAD
。
通常,请参阅特定模块的文档,了解推荐的加载该模块的方式。
local_preload_libraries
(字符串
) #此变量指定应在连接启动时预加载的一个或多个共享库。它包含库名称的逗号分隔列表,其中每个名称的解释与 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 提供程序库的名称(参见 第 30.4.2 节)。默认值为 llvmjit
。此参数只能在服务器启动时设置。
如果设置为不存在的库,JIT将不可用,但不会引发错误。这允许 JIT 支持与主 PostgreSQL 包分开安装。
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 索引扫描返回的集合尺寸的上限值。欲了解更多信息,请参见 第 64.4.5 节。