19.11. Client 端连接默认设置

19 .11.1. Statements 行为

INFO级消息总是发送给 Client 端。

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

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

无论是否在路径中提及,始终都会搜索系统目录架构pg_catalog。如果在路径中提到它,则将以指定的 Sequences 搜索它。如果pg_catalog不在路径中,则将搜索任何路径项之前对其进行搜索。

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

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

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

有关架构处理的更多信息,请参见Section 5.8。特别是,仅当数据库具有单个用户或几个相互信任的用户时,默认配置才适用。

可以通过 SQL 函数current_schemas(请参阅Section 9.25)检查搜索路径的当前有效值。这与检查search_path的值并不完全相同,因为current_schemas显示了如何解析search_path中出现的项目。

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

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

该变量不用于临时表。对于他们,则改为咨询temp_tablespaces

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

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

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

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

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

另请参见default_tablespace

有关更多信息,请咨询Chapter 13SET TRANSACTION

有关更多信息,请咨询SET TRANSACTION

此参数控制每个新事务的默认可延期状态。当前,它对读写事务或隔离级别低于serializable的事务没有影响。默认值为off

有关更多信息,请咨询SET TRANSACTION

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

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

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

默认值 0 禁用此功能。

此处的实际选择主要取决于口味,仅受 Client 端应用程序中可能存在的限制的约束。两种方法都支持所有可能的值,尽管十六进制编码将比 base64 编码大一些。

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

SET XML OPTION { DOCUMENT | CONTENT };

该语法在 PostgreSQL 中也可用。

19 .11.2. 语言环境和格式

IntervalStyle参数还会影响对模糊时间间隔 Importing 的解释。有关更多信息,请参见Section 8.5.4

在某些系统上,此语言环境类别不存在。设置此变量仍将起作用,但不会生效。同样,有可能不存在所需语言的翻译消息。在这种情况下,您将 continue 看到英语消息。

只有超级用户才能更改此设置,因为它会影响发送到服务器日志和 Client 端的消息,并且不正确的值可能会掩盖服务器日志的可读性。

19 .11.3. 共享库预加载

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

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

这样只能加载专门用于 PostgreSQL 的共享库。每个 PostgreSQL 支持的库都有一个“魔术块”,选中该魔术块可以保证兼容性。因此,无法以这种方式加载非 PostgreSQL 库。您可能可以使用诸如LD_PRELOAD之类的 os 工具。

通常,请参阅特定模块的文档,以获取建议的模块加载方式。

任何用户都可以设置此选项。因此,可以加载的库仅限于安装在标准库目录的plugins子目录中的库。 (确保仅在其中安装“安全”库是数据库 Management 员的责任.)local_preload_libraries中的条目可以显式指定此目录,例如$libdir/plugins/mylib,或仅指定库名-mylib$libdir/plugins/mylib具有相同的作用。

此功能的目的是允许非特权用户将调试或性能评估库加载到特定会话中,而无需显式的LOAD命令。为此,通常使用 Client 机上的PGOPTIONS环境变量或使用ALTER ROLE SET来设置此参数。

但是,除非非超级用户专门设计了一种以这种方式使用的模块,否则通常不是正确的设置。看session_preload_libraries

此功能的目的是允许将调试或性能评估库加载到特定会话中,而无需给出明确的LOAD命令。例如,通过使用ALTER ROLE SET设置此参数,可以为给定用户名下的所有会话启用auto_explain。此外,可以在不重新启动服务器的情况下更改此参数(但是更改仅在启动新会话时才生效),因此,即使应将新模块应用于所有会话,也更容易以这种方式添加新模块。

shared_preload_libraries不同,在会话开始时(而不是在首次使用时)加载库没有太大的性能优势。但是,使用连接池时有一些优点。

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

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

Note

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

19 .11.4. 其他默认值

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'。如果该值设置为空字符串,则自动路径搜索将关闭。

超级用户可以在运行时更改此参数,但是以这种方式进行的设置将一直保留到 Client 端连接结束,因此应保留此方法用于开发目的。推荐的设置此参数的方法是在postgresql.conf配置文件中。

上一章 首页 下一章