18.10. 客户端连接缺省

18.10.1. 语句行为

search_path(string)

这个变量声明模式的搜索顺序,在一个被引用对象(表、数据类型、函数等) 只是一个简单名字,没有附加模式部分时需要这样的搜索。如果在另外一个 模式里有一个相同的对象名,那么使用在这个搜索路径中找到的第一个。 一个不在搜索路径中任何一个模式里出现的对象只能通过其所在模式的全称 (打点的)名字来声明。

search_path的值必需是一个逗号分隔的模式名列表。 列表中的特殊值$userSESSION_USER 所代换的名字一样(如果存在这个模式的话,否则$user 将被忽略)。

系统表模式pg_catalog总是被搜索,不管是否在搜索路径。 如果在路径中,那么按照路径指定的顺序搜索,否则它将在任何路径项 before 搜索。我们还要注意的是,临时表模式pg_catalog也 隐含在任何这些项之前搜索。

同样,如果存在的话,也会搜索当前会话的临时表模式,pg_temp_nnn。 使用别名pg_temp,可以在路径中明确列出。 如果在路径中没有列出,那么会首先对它进行搜索(甚至是在pg_catalog之前)。 然而,临时模式值搜索关系(如,表,视图,序列等)和数据类型名。 不用于搜索函数或操作符名。

如果创建对象时没有声明特定的目标模式,那么它将被放进搜索路径中 的第一个模式。如果搜索路径是空的,那么会报告一个错误。

这个参数的缺省值是'"$user", public' (如果没有public模式那么第二部分将被忽略)。这样就支持共享使用 一个数据库(没有用户拥有私有模式,所有人都共享使用public)、 私有的针对每个用户的模式、以及两者的组合。其它效果可以通过全局 或者针对每个用户修改搜索路径设置获取。

搜索路径当前值可以用SQL函数 current_schemas()检查。它和检查 search_path的值不太一样,因为 current_schemas()显示的是在search_path 里出现的请求如何被分析。

有关模式处理的更多信息,参阅节Section 5.7.。

default_tablespace(string)

这个变量声明当CREATE命令没有明确声明表空间时, 所创建对象(表和索引等)的缺省表空间。

值要么是一个表空间的名字,要么是一个表明使用当前数据库缺省表空间 的空字符串。如果这个数值和任意现存表空间的名字都不匹配,那么 PostgreSQL将自动使用当前数据库的缺省表空间。 如果声明了一个非默认的表空间,用户必须对它有CREATE权限。

这个变量不用于临时表,对临时表是用temp_tablespaces

有关表空间的更多的信息,参阅节Section 21.6.

temp_tablespaces(string)

CREATE命令没有明确声明一个表空间时, 这个变量会声明一个表空间用以存储临时对象(临时表或临时表上的索引)。 如,为了排序大对象集等目的的临时文件也是创建在这种表空间中。

值是一个包含表空间名的列表。当这个列表中不止一个名字时, PostgreSQL会为要创建的临时对象选择一个随机表空间名; 除非是在一个事务中,连续创建的临时对象被存储在列表中连续的表空间中。 如果列表中选择的元素如果是空字符串,PostgreSQL会自动选择 使用当前数据库的默认表空间。

temp_tablespaces设置成交互模式时,声明一个不存在的表空间时会报错, 作为被指定一个表空间,用户没有create权限。 然而,当使用先前设置的值时,可以忽略不存在的表空间。 尤其是当使用postgresql.conf中设置的值时,应用这条规则。

缺省值是一个空字符串,从而使得所有临时对象被创建在当前数据库的默认表空间。

参阅default_tablespace.

check_function_bodies(boolean)

这个参数通常是 on 。设置为off表示在CREATE FUNCTION时关闭函数体字符串的合法性检查。 关闭合法性检查有时候会有用,比如避免从转储中恢复函数定义时向前引用的问题。

default_transaction_isolation(enum)

每个 SQL 事务都有一个隔离级别,可以是"read uncommitted""read committed""repeatable read", 或者 "serializable"。这个参数控制每个新事务的隔离级别。 缺省是读已提交。

参考章Chapter 13SET TRANSACTION获取更多信息。

default_transaction_read_only(boolean)

只读的 SQL 事务不能修改非临时表。这个参数控制每个新事务的只读状态 。缺省是off(读/写)。

参阅SET TRANSACTION

session_replication_role(enum)

为当前会话控制复制相关的触发器和规则。需要超级用户权限才能设置该参数, 然后会忽略之前的查询缓冲计划。可能的值有origin(缺省), replicalocal。 参阅ALTER TABLE

statement_timeout(integer)

退出任何使用了超过此参数指定时间(毫秒)的语句,从服务器收到命令时开始计时。 如果log_min_error_statement设置为ERROR 或者更低,那么也会在日志中记录超时。零值(缺省)关闭这个计时器。

Settingstatement_timeoutin postgresql.confis not recommended because it affects all sessions.

vacuum_freeze_table_age(integer)

当表的pg_class.relfrozenx id段 达到该设置值时,VACUUM执行一次全表扫描。缺省值是1.5亿个事务。 尽管设置范围是0到10亿,VACUUM会静默的讲有效值设置为 autovacuum_freeze_max_age值的95%, 因此在表上反重叠自动清理之前,要定期进行手动VACUUM。 可参阅Section 23.1.4

vacuum_freeze_min_age(integer)

指定VACUUM在扫描一个表时用于判断是否用 FrozenXID替换事务ID的中断寿命(在同一个事务中)。 缺省值为 50000000(5千万)。虽然用户可以指定一个 0-1000000000 之间的值, 但是VACUUM将会悄无声息的将有效值限制在 autovacuum_freeze_max_age的一半之内。 更多信息参见 节Section 23.1.4.。

bytea_output(enum)

设置bytea值的输出格式。有效值是hex(缺省)和 escape(传统的PostgreSQL格式)。可参阅Section 8.4bytea的这两种格式在输入时都支持,忽略该设置。

xmlbinary(enum)

设置在XML中如何编码二进制值。这适用于例子(当通过functionsxmlelementxmlforest函数将bytea值转换到XML时)。 可能的值有base64hex, 都是用XML模式标准定义的。缺省值是base64。 更多滚与XML相关函数的信息可参阅Section 9.14

实际上,可以根据自己的爱好来进行选择, 只有通过在客户端应用程序中的限制才能进行约束。 这两种方法都支持所有的值,虽然十六进制编码可能略高于基本的64编码。

xmloption(enum)

当在XML和字符串值之间进行转换时,无论设置DOCUMENTCONTENT都是隐式的。可参阅Section 8.13。 有效值是DOCUMENTCONTENT。 缺省值是CONTENT

根据SQL标准,设置这个选项的命令是:

SET XML OPTION { DOCUMENT | CONTENT };

This syntax is also available in PostgreSQL.

18.10.2. 区域和格式化

DateStyle(string)

设置日期和时间值的显示格式,以及有歧义的输入值的解析规则。由于历史原因, 这个变量包含两个独立的部分:输出格式声明(ISOPostgresSQL, orGerman)、 输入输出的年/月/日顺序(DMYMDY, orYMD) 。这两个可以独立设置或者一起设置。关键字EuroEuropean等价于DMY;关键字 USNonEuro, 和 NonEuropean等价于MDY。 参阅节Section 8.5获取更多信息。 内置缺省是ISO, MDY,但是initdb 将在初始化配置文件时根据lc_time选择一个合适的默认设置。

IntervalStyle(enum)

设置间隔值的显示格式。sql_standard会输出匹配 SQL标准的间隔文本。当DateStyle 参数设置为ISO时,postgres值(缺省)会产生 匹配PostgreSQL 8.4之前版本的输出。 当DateStyle 参数设置为非ISO输出时,postgres_verbose值会产生 匹配PostgreSQL 8.4之前版本的输出。 iso_8601会产生匹配ISO 8601的4.4.3.2节中的带有标识符的时间间隔格式 的输出。

IntervalStyle参数也可以影响歧义的间隔输入的解释。 参阅Section 8.5.4

timezone(string)

设置用于显示和解析时间戳的时区。缺省值unknown意味着 使用系统环境声明的时区。参阅节Section 8.5.3获取更多信息。

timezone_abbreviations(string)

设置服务器接受日期时间输入中使用的时区缩写集合。缺省值 'Default', 在全世界大多数地方都能工作的很好。另外的可用值还有 'Australia'和'India'等其它值。参见Appendix B以获取更多信息。

extra_float_digits(integer)

这个参数为浮点数值调整显示的数据位数,浮点类型包括float4float8,以及几何数据类型。参数值加在标准的数据位数上 (FLT_DIGDBL_DIG中合适的)。数值可以设置为最高 3 ,以包括部分关键的数据位;这个功能对转储那些需要精确恢复的浮点数据特别有用。 或者你也可以把它设置位负数以消除不需要的数据位。

client_encoding(string)

设置客户端编码(字符集)。缺省使用数据库编码。

lc_messages(string)

设置信息显示的语言。可接受的值是系统相关的;参阅节 Section 22.1获取更多信息。如果这个变量设置为空字符串(缺省值), 那么其值将以一种系统相关的方式从服务器的执行环境中继承。

在一些系统上,这个区域范畴并不存在,不过仍然允许设置这个变量, 只是不会有任何效果。同样,也有可能是所期望的语言的翻译信息不存在。 在这种情况下,你仍然能看到英文信息。

只有超级用户可以改变这个设置。因为它同时影响发送到服务器 日志和客户端的信息。一个不正确的值可能会掩盖服务器日志的可读性。

lc_monetary(string)

为格式化金额数量设置区域。比如用于to_char 函数族。可接受的值是系统相关的;参阅节Section 22.1 获取更多信息。如果这个变量设置为空字符串(缺省值),那么其值将以 一种系统相关的方式从服务器的执行环境中继承。

lc_numeric(string)

设置用于格式化数字的区域,比如用于to_char 函数族。可接受的值是系统相关的;参阅节Section 22.1获取 更多信息。如果这个变量设置为空字符串(缺省值),那么其值将以一种 系统相关的方式从服务器的执行环境中继承。

lc_time(string)

设置用于格式化日期和时间值的区域。例如带有to_char 家庭功能。目前,这个设置什么事也没干,但将来可能会有用。可接受的 值是系统相关的;参阅节Section 22.1获取更多信息。 如果这个变量设置为空字符串(缺省值),那么其值将以一种系统相关的方式 从服务器的执行环境中继承。

default_text_search_config(string)

选择没有明确参数声明配置的全文检索函数所使用的配置。 参阅Chapter 12。缺省编译时pg_catalog.simpleinitdb会选择对应的lc_ctype环境设置 来初始化配置文件。

18.10.3. 其它缺省

dynamic_library_path(string)

如果需要打开一个可以动态装载的模块并且在CREATE FUNCTIONLOAD命令里面声明的名字没有目录部分(也就是说 名字里不包含斜杠),那么系统将搜索这个目录以查找声明的文件。

用于dynamic_library_path的数值必须是一个冒号 分隔(或者是在 Windows 上分号分隔)的绝对路径列表。如果一个路径名字 以特殊变量$libdir(PostgreSQL 编译好的库目录)开头, 那么就替换为PostgreSQL发布提供的模块 安装路径。这是标准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'。如果把这个值设置 为一个空字符串,则关闭自动路径搜索。

这个参数可以在运行时由超级用户修改,但是这么修改的设置只能保持 到这个客户端连接的结束,因此这个方法应该保留给开发用途使用。 我们建议在postgresql.conf配置文件里设置。

gin_fuzzy_search_limit(integer)

GIN 索引返回的集合尺寸软上限。更多信息参见节Section 53.4.。

local_preload_libraries(string)

指定在开始连接前预先加载一个或多个共享库,多个库之间用逗号分隔。 所有库名都转换为小写,除非双引号。 该参数不能在会话开始之后更改。

因为并非只有超级用户才能更改此选项,因此只能加载安装的标准库 目录下plugins子目录中的库文件,数据库管理员有责任确保 该目录中的库都是安全"safe"的。local_preload_libraries中指定 的项可以明确含有该目录,例如 $libdir/plugins/mylib ; 也可以仅指定库的名字,例如mylib (等价于$libdir/plugins/mylib)。

local_preload_libraries不同,在会话开始之前加载模块 与在回话中使用到该模块的时候临时加载相比并不具有性能优势。这个特性 的目的是为了调试或者测量在特定会话中不明确使用LOAD 加载库时的性能。例如针对某个用户将该参数设为 ALTER USER SET来进行调试。

如果指定的库未找到,那么连接将失败。

每一个支持 PostgreSQL 的库都有一个"magic block"用于确保兼容性。因此不支持 PostgreSQL 的库不能通过这个方法加载。