支持的版本: 当前 (17) / 16 / 15 / 14 / 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

19.11. 客户端连接默认值 #

19.11.1. 语句行为 #

client_min_messages (enum) #

控制哪些消息级别发送给客户端。有效值包括DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOGNOTICEWARNINGERROR。每个级别都包括其后的所有级别。级别越高,发送的消息越少。默认值为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.10 节。特别是,默认配置仅在数据库具有单个用户或少数相互信任的用户时才适用。

可以通过以下方式检查搜索路径的当前有效值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 TABLEALTER TABLE 中设置 COMPRESSION 列选项来覆盖单个列的设置。) 支持的压缩方法有 pglz 和(如果 PostgreSQL 在编译时使用了 --with-lz4lz4。默认值为 pglz

temp_tablespaces (string) #

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

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

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

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

另请参见 default_tablespace

check_function_bodies (boolean) #

此参数通常为 on。当设置为 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 语句出现在单个简单查询消息中,则超时将分别应用于每个语句。(PostgreSQL 13 之前的版本通常将超时视为应用于整个查询字符串。)在扩展查询协议中,超时在任何与查询相关的消息(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) #

如果表的 pg_class.relfrozenxid 字段已达到此设置指定的年龄,则 VACUUM 将执行一次激进扫描。激进扫描与常规 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 的最后手段策略。通常,在防止事务 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。有关更多信息,请参阅 第 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 中编码的方式。例如,当通过函数 xmlelementxmlforestbytea 值转换为 XML 时,适用此设置。可能的值为 base64hex,这两个值都在 XML 架构标准中定义。默认值为 base64。有关 XML 相关函数的更多信息,请参阅 第 9.15 节

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

xmloption (enum) #

设置在 XML 和字符字符串值之间进行转换时,隐式使用 DOCUMENT 还是 CONTENT。有关此内容的说明,请参阅 第 8.13 节。有效值为 DOCUMENTCONTENT。默认值为 CONTENT

根据 SQL 标准,用于设置此选项的命令是

SET XML OPTION { DOCUMENT | CONTENT };

此语法在 PostgreSQL 中也可用。

gin_pending_list_limit (integer) #

设置启用 fastupdate 时使用的 GIN 索引的待处理列表的最大大小。如果列表增长超过此最大大小,则会通过将列表中的条目批量移动到索引的主 GIN 数据结构中来清理该列表。如果此值在没有单位的情况下指定,则以千字节为单位。默认值为 4 兆字节 (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 (boolean) #

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

restrict_nonsystem_relation_kind (string) #

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

19.11.2. 区域设置和格式化 #

DateStyle (string) #

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

IntervalStyle (enum) #

设置间隔值的显示格式。值 sql_standard 将生成与SQL标准间隔文字匹配的输出。当 DateStyle 参数设置为 ISO 时,值 postgres(这是默认值)将生成与 8.4 之前的 PostgreSQL 版本匹配的输出。当 DateStyle 参数设置为非 ISO 输出时,值 postgres_verbose 将生成与 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) #

设置服务器将接受的用于日期时间输入的时区缩写集合。默认值为 'Default',它是世界上大多数地方都适用的集合;还有 'Australia''India',并且可以为特定安装定义其他集合。有关详细信息,请参见第 B.4 节

extra_float_digits (integer) #

此参数调整用于浮点值(包括 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 (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 (enum) #

当遇到 ICU 区域设置验证问题时,控制使用哪个消息级别来报告问题。有效值包括 DISABLEDDEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORLOG

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

default_text_search_config (string) #

选择那些没有明确指定配置参数的文本搜索函数变体所使用的文本搜索配置。有关更多信息,请参见第 12 章。内置的默认值是 pg_catalog.simple,但是,如果可以找到与所选的 lc_ctype 区域设置匹配的配置,则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 主机上,在服务器启动时预加载库不会减少启动每个新服务器进程所需的时间;每个服务器进程都会重新加载所有预加载库。但是,对于需要在 postmaster 启动时执行操作的库,shared_preload_libraries 在 Windows 主机上仍然有用。

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 节

提交更正

如果您发现文档中有任何不正确、与您使用特定功能的经验不符或需要进一步澄清的地方,请使用此表单报告文档问题。