18.12. 客户端连接默认值

18.12.1. 语句行为
18.12.2. 区域和格式化
18.12.3. 共享库预载入
18.12.4. 其他默认值

18.12.1. 语句行为

client_min_messages (enum)

控制被发送给客户端的消息级别。有效值是DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOGNOTICEWARNINGERROR。 每个级别都包括其后的所有级别。级别越靠后,被发送的消息越少。默认值是NOTICE。 注意LOG在这里有与log_min_messages中不同的排名。

INFO 级别的消息总是被发送到客户端。

search_path (string)

这个变量指定当一个对象(表、数据类型、函数等)被用一个无模式限定的简单名称引用时,用于进行搜索该对象的模式顺序。当在不同模式中有同名对象时,将使用第一个在搜索路径中被找到的对象。一个不属于搜索路径中任何一个模式的对象只能通过用限定名(带点号)指定包含它的模式来引用。

search_path的值必需是一个逗号分隔的模式名列表。任何不是一个已有模式的名称,或者是一个用户不具有USAGE权限的模式,将被安静地忽略。

如果列表项之一是特殊名$user,则具有SESSION_USER返回的名字的模式将取代它(如果有这样一个模式并且该用户有该模式的USAGE权限;如果没有,$user会被忽略)。

如果列表项之一是特殊名$lt_syntax_compatible_type,并且lightdb_dblevel_syntax_compatible_type不是off,则具有lt_syntax_compatible_type返回的名字的模式将取代它(如果有这样一个模式并且该用户有该模式的USAGE权限)。 (如果lightdb_dblevel_syntax_compatible_type是off, $lt_syntax_compatible_type会被忽略)

系统目录模式pg_catalog总是被搜索,不管它是否在搜索路径中被提及。如果它在路径中被提及,那么它将被按照路径指定的顺序搜索。如果pg_catalog不在路径中,则它将在任何路径项之前被搜索。

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

当对象创建时没有指定一个特定目标模式,它们将被放置在search_path中第一个合法模式中。如果搜索路径为空将报告一个错误。

这个参数的缺省值是"$user", public。这种设置支持一个数据库(其中没有用户拥有私有模式,并且所有人共享使用public)、每个用户私有模式及其组合的共享使用。其它效果可以通过全局或者针对每个用户修改默认搜索路径设置获得。

更多有关方案处理的信息,请参考Section 6.9。特别地,只有当数据库只有一个用户或者有少数的相互信任的用户时,默认配置是合适的。

搜索路径的当前有效值可以通过SQL函数current_schemas检查(见Section 10.25)。它和检查search_path的值不太一样,因为current_schemas显示出现在search_path中的项如何被解析。

mysql和oracle是特殊的模式,只能包含在指定的lightdb_dblevel_syntax_compatible_type中。

row_security (boolean)

这个变量控制是否以抛出一个错误来代替应用一条行安全性策略。在设置为on时,策略正常应用。在设置为off时,只要有至少一条策略被应用则查询就会失败。默认为on。受限的行可见性会导致不正确的结果时,可将其改成off。例如,lt_dump默认会做这种更改。这个变量对能绕过每一条行安全性策略的角色(即超级用户和具有BYPASSRLS)属性的角色没有效果。

更多关于行安全性策略的信息请见CREATE POLICY

default_table_access_method (string)

如果 CREATE命令没有显式指定访问方法,则此参数指定在创建表时使用的默认表访问方法, 或者在使用SELECT ... INTO 时,不允许指定表访问方法。默认为heap

default_tablespace (string)

这个变量指定当一个CREATE命令没有显式指定一个表空间时,创建对象(表和索引)的默认表空间。

该值要么是一个表空间的名字,要么是一个指定使用当前数据库默认表空间的空字符串。如果该值和任何现有表空间的名字都不匹配,LightDB将自动使用当前数据库的默认表空间。如果指定了一个非默认的表空间,用户必须对它有CREATE权限,否则创建企图将失败。

这个变量不被用于临时表,对临时表会使用temp_tablespaces

当创建数据库时也会使用这个变量。默认情况下,一个新数据库会从它的模板数据库继承其表空间设置。

当一个分区表建立时如果这个参数被设置为空字符串以外的值,分区表的表空间将被设置为该值,将被用做未来建立分区的默认表空间, 即使default_tablespace已经改变。

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

temp_tablespaces (string)

这个变量指定当一个CREATE命令没有显式指定一个表空间时,创建临时对象(临时表和临时表上的索引)的默认表空间。用于排序大型数据集的临时文件也被创建在这些表空间中。

该值是一个表空间名字的列表。当列表中有多于一个名称时,每次一个临时对象被创建时LightDB随机选择列表中的一个成员。例外是在一个事务中,连续创建的临时对象被放置在里表中的连续表空间中。如果列表被选中元素是一个空字符串,LightDB将自动使用当前数据库的默认表空间。

temp_tablespaces被交互式地设置时,指定一个不存在的表空间是一种错误,类似于为用户指定一个不具有CREATE权限的表空间。不过,当使用一个之前设置的值时,不存在的表空间会被忽略,就像用户缺少CREATE权限的表空间一样。特殊地,使用一个在lightdb.conf中设置的值时,这条规则起效。

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

参阅default_tablespace

check_function_bodies (boolean)

这个参数通常为打开。 当设置为off时,它禁用CREATE FUNCTIONCREATE PROCEDURE期间对例程体字符串的验证。 禁用验证避免了验证处理的副作用,特别避免了如向前引用导致的伪肯定。 在代表其他用户载入函数之前设置这个参数为offlt_dump会自动这样做。

lightdb_analyze_function_bodies (boolean)

这个参数通常是关闭的。当设置为 on 时,它在 CREATE FUNCTIONCREATE PROCEDURE 过程中启用对例程体字符串中表及其列存在性的验证。

default_transaction_isolation (enum)

每个 SQL 事务都有一个隔离级别,可以是读未提交读已提交可重复读或者可序列化。这个参数控制每个新事务的默认隔离级别。默认是读已提交

更多信息请参阅Chapter 14SET 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 (boolean)

此参数反映当前事务的可延迟性状态。 在每个事务的开始,它被设置为default_transaction_deferrable的当前值。 任何后续尝试更改它的都等同于SET TRANSACTION命令。

session_replication_role (enum)

为当前会话控制复制相关的触发器和规则的触发。需要超级用户权限才能设置这个变量,并且会导致丢弃任何之前缓存下来的查询计划。可能的值有origin(默认)、replicalocal

这个设置的预期用途是由逻辑复制系统在应用所复制的更改时将它设置为replica。 其效果将是触发器和规则(没有对其默认配置做修改)在复制机上将不会被触发。 更多信息请参考ALTER TABLE的子句ENABLE TRIGGER以及ENABLE RULE

LightDB在内部会把设置originlocal同样对待。第三方复制系统可能会把这两个值用于其内部目的,例如把local用来标出一个不应复制其更改的会话。

因为外键被实现为触发器,将这个参数设置为replica还会禁用所有的外键检查,如果使用不当可能会让数据处于一种不一致的状态。

statement_timeout (integer)

中止任何使用了超过指定时间量的语句。 如果log_min_error_statement被设置为ERROR或更低,语句如果超时也会被记录。 如果指定值时没有单位,则以毫秒为单位。一个零值(默认)将禁用超时。

超时从命令到达服务器的时间开始计算,一直到它被服务器完成为止。 如果单个简单查询消息中出现多个 SQL 语句,超时将分别应用于每个语句。(LightDB 13 之前的版本通常将超时应用于整个查询字符串。 在扩展查询协议中,当任何与查询相关的消息(解析、绑定、执行、描述)到达时,超时就开始运行,并且可以通过执行完成或同步消息来取消超时。

我们不推荐在lightdb.conf中设置statement_timeout,因为它会影响所有会话。

lock_timeout (integer)

如果任何语句在试图获取表、索引、行或其他数据库对象上的锁时等到超过指定的时间量,该语句将被中止。 该时间限制独立地应用于每一次锁获取尝试。该限制会应用到显式锁定请求(如LOCK TABLE或不带NOWAITSELECT FOR UPDATE)和隐式获得的锁。 如果指定值时没有单位,则以毫秒为单位。一个零值(默认)将禁用超时。

statement_timeout不同,这个超时只在等待锁时发生。注意如果statement_timeout为非零,设置lock_timeout为相同或更大的值没有意义,因为事务超时将总是第一个被触发。 如果log_min_error_statement 被设置为ERROR 或更低,超时的语句将被记录。

我们不推荐在lightdb.conf中设置lock_timeout,因为它会影响所有会话。

idle_in_transaction_session_timeout (integer)

终止在未结束事务中闲置(即等待客户端查询)时间超过指定时间的会话。 如果该值未指定单位,则按毫秒计算。 如果值为零(默认值),则会禁用超时。

该选项可用于确保空闲会话不会在不合理的时间内持有锁。 即使没有持有重要的锁,一个打开的事务也会阻止用vacuuming 吸走最近死亡的元组,而这些元组可能只有该事务可见;因此,长时间闲置会导致表膨胀。 有关详细信息,请参阅 Section 23.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 23.1.5

vacuum_freeze_min_age (integer)

指定VACUUM在扫描表时用来决定是否冻结行版本的切断年龄(以事务计)。默认值是 5 千万个事务。尽管用户可以将这个值设置为从 0 到 10 亿,VACUUM会悄悄地将有效值设置为autovacuum_freeze_max_age值的一半,这样在强制执行的自动清理之间不会有过短的时间间隔。更多信息请见Section 23.1.5

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。更多信息请见Section 23.1.5.1

vacuum_multixact_freeze_min_age (integer)

指定VACUUM在扫描表时用来决定是否把组合事务 ID 替换为一个更新的事务 ID 或组合事务 ID 的切断年龄(以组合事务计)。默认值是 5 千万个组合事务。尽管用户可以将这个值设置为从 0 到 10 亿,VACUUM会悄悄地将有效值设置为autovacuum_multixact_freeze_max_age值的一半,这样在强制执行的自动清理之间不会有过短的时间间隔。更多信息请见Section 23.1.5.1

bytea_output (enum)

设置bytea类型值的输出格式。有效值是hex(默认)和 escape(传统的 LightDB 格式)。详见Section 9.3。不管这个设置的值如何,bytea类型总是接受这两种格式的输入。

xmlbinary (enum)

设置二进制值如何被编码为 XML。例如,这适用于通过xmlelement函数或xmlforest函数将bytea值转换到 XML 值。可能的值有base64hex,它们都是用 XML 模式标准定义的。默认值是base64。更多关于 XML 相关函数的信息可参阅Section 10.14

这里的实际选择都是根据爱好做出的,只受客户端应用中可能存在的限制的约束。两种方法都支持所有可能的值,尽管十六进制编码将比 base64 编码更大。

xmloption (enum)

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

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

SET XML OPTION { DOCUMENT | CONTENT };

这种语法在 LightDB 也可用。

restrict_nonsystem_relation_kind (string)

指定禁止访问的对象类型,多个对象类型可使用逗号分隔,当前支持两种对象: viewforeign-table

lightdb_syntax_compatible_type (enum)

有效值为Oracle、MySQL、off。默认值为off。设置create database命令的默认值。例如,当值为oracle时,“创建数据库测试”等效于“使用lightdb_syntax_compatible_type oracle创建数据库测试。

lightdb_dblevel_syntax_compatible_type (enum)

报告当前数据库的语法兼容类型。它取决于创建数据库时lightdb_syntax_compatible_type的值。

当该值设置为Oracle时,以下功能会有所不同:

  • 当运算符为“/”且两个操作数的数据类型均为整数时,返回值类型为数字。

  • 当表达式的类型为文本,varchar(n), varchar2(n), nvarchar2(n)或char(n)时,空字符串被认为是NULL。

  • 当表达式的类型为char(n)时,转换为text或varchar(n)而不删除尾部空格。

  • 空字符串可以转换为整数类型、浮点类型、数字、日期、时间、带时区的时间戳和不带时区的时戳,值为NULL。

  • 支持rowid

  • 支持ROWNUM

  • PLPGSQL中使用的Sysdate和Systimestamp将在不同的语句中获得不同的值,否则获得相同的值。

  • search_path可以包括oracle。当search_path包含oracle时,首先调用oracle模式的函数。

  • transform_null_equals无效

  • 和oracle一样,当没有group by子句同时有聚合函数时,允许出现order by子句.

  • “||-”和“||+”不被视为合法的运算符名称。“||-”被视为“||”和“-”运算符;“||+”被视为“||”和“+”运算符。

  • 支持使用oracle兼容语法创建和删除触发器

  • 当存在 GROUP BY子句时, 如果未分组的列在子查询中,且子查询中和该列相等的表达式在分组列中,这时未分组列允许出现在select列表中。

当该值设置为MySQL时,以下功能会有所不同:

  • search_path可以包括mysql。当search_path包含mysql时,首先调用mysql模式的函数。

  • 支持用户变量。请参见Section 5.2.14

  • transform_null_equals无效

  • 与mysql相同,integer类型的值作为布尔值使用。例如,“select*from test where 1”相当于“select*form test where true”。

  • 在insert和update语句中,可以使用varchar,char(n)和text给timestamp with time zone, datetime类型的属性赋值

  • 支持日期类型(仅包含date,datetime and timestamp with time zone)的表达式和字符类型值表达式比较

  • CAST(expr AS char[(n)])(参考Section 5.2.9)接受任何类型的表达式,并生成VARCHAR数据类型的字符串。

  • case表达式(see Section 10.17.1)结果集合支持更多类型组合。

lightdb_mysql_lower_case_table_names (boolean)

在Mysql兼容模式下,是否开启表名全小写特性。这个参数的值为true或者false,默认值是true。true: 开启 false: 不开启

lightdb_ascii_zero_store_value (整形)

此值由lightdb_ascii_zero_store_value决定,数据库创建的时候设定。Oracle模式或Mysql模式下此值才有意义。

Lightdb 23.3 引入了一个新的GUC参数 lightdb_ascii_zero_store_value, 此值取值范围为0到32,包含0,32,数据库创建时指定,创建成功后不能被修改。

当兼容模式被设置为Oracle或Mysql,并且 lightdb_ascii_zero_store_value 设置为非零ASCII码值, ASCII 码值 E'\0' 以及 CHR(0) 的值等于 ASCII 码值 lightdb_ascii_zero_store_value, 如果我们通过JDBC的绑定参数与服务端交互,文本类型的参数中ASCII码值 '\0' 由 ASCII 码值 lightdb_ascii_zero_store_value 在服务器端被替换, Libpq同样场景下, 值替换发生在Libpq这一端。 也请注意,如果ASCII码值 '\0' 由 ASCII 码值 lightdb_ascii_zero_store_value替换,替换后此值在系统中的行为与 ASCII 码值 lightdb_ascii_zero_store_value 相同,比如,比较操作,concat函数调用,length函数调用,等其它接受字符输入参数的函数。

lightdb_convert_chinese_char (boolean)

在Oracle兼容模式下,将SQL语句中的中文逗号和中文空格,转换成英文逗号和英文空格。这个参数的值为true或者false,默认值是true。true: 开启 false: 不开启

lightdb_ignore_template_compatible_type_mismatch (boolean)

该参数从 Lightdb 23.4 开始引入,用于决定如何处理 CREATE DATABASETEMPLATE 选项和 LIGHTDB_SYNTAX_COMPATIBLE_TYPE 选项不兼容的情况。当两个选项不兼容时,如果该 GUC 参数的值为 false,则提示错误,否则忽略 TEMPLATE 选项。这个参数的值为true或者false,默认值是false。

18.12.2. 区域和格式化

DateStyle (string)

设置日期和时间值的显示格式,以及解释有歧义的日期输入值的规则。由于历史原因, 这个变量包含两个独立的部分:输出格式声明(ISOPostgresSQLGerman)、 输入/输出的年/月/日顺序(DMYMDYYMD)。这些可以被独立设置或者一起设置。关键字EuroEuropeanDMY的同义词;关键字USNonEuroNonEuropeanMDY的同义词。详见Section 9.4。内建默认值是ISO, MDY,但是lt_initdb将用对应于选中的lc_time区域行为的设置初始化配置文件。

IntervalStyle (enum)

设置间隔值的显示格式。值sql_standard将产生匹配 SQL 标准间隔文本的输出。值iso_8601会产生匹配在 ISO 8601 的 4.4.3.2 节中定义的带标志符格式的时间间隔的输出。

IntervalStyle参数也可以影响对有歧义的间隔输入的解释。详见Section 9.4.4

TimeZone (string)

设置用于显示和解释时间戳的时区。内建默认值是GMT,但是它通常会在lightdb.conf中被覆盖;lt_initdb将安装一个对应于其系统环境的设置。详见Section 9.4.3

timezone_abbreviations (string)

设置服务器接受的日期时间输入中使用的时区缩写集合。默认值为'Default', 这个集合在全世界大多数地方都能工作。也还有'Australia''India',以及可能为一种特定安装定义的其他集合。详见Section B.4

extra_float_digits (integer)

这个参数调整用于文本输出浮点值的位数,包括float4float8以及几何数据类型。

如果值为1(默认值)或更高,浮点值被输出为最短-精度格式;参见Section 9.1.3。 实际生成的位数只取决于输出的值,而不取决于此参数的值。 float8 值最多需要 17 位数字,float4值最多需要9位数字。 这种格式既快速又精确,在正确读取时精确地保留了原始的二进制浮点值。为了历史兼容性,允许的值最大为3。

如果值为零或负,则输出四舍五入为给定的十进制精度。 使用的精度是根据此参数的值减小的类型((FLT_DIGDBL_DIG,视情况而定)的标准位数。 (例如,指定 -1 将导致float4 值输出四舍五入为 5 位有效数字,而float8值四舍五入为 14 位。) 此格式较慢,不会保留二进制浮点值的所有位,但可能令人更易于阅读。

Note

此参数的含义,以及其默认值,在 LightDB 12 中发生了变化; 参见 Section 9.1.3 以便进一步讨论。

client_encoding (string)

设置客户端编码(字符集)。默认使用数据库编码。LightDB服务器所支持的字符集在Section 22.3.1中描述。

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 13。内建默认值是pg_catalog.simple,但是如果能够标识一个匹配区域的配置,lt_initdb将用对应于选中的lc_ctype区域的设置初始化配置文件。

lightdb_tsearch_non_stopwords (string)

LightDB全文搜索有许多内置的停止词。由停止词连接的单词将通过to_tsvector函数拆分为多个独立的单词,例如,“2022-04-10”将拆分为“2022”、“04”和“10”。 lightdb_tsearch_non_stopwords用于自定义不间断词,这与停止词正好相反,即不间断词被认为是单词的一个组成部分,因此不再被to_tsvector函数拆分为多个独立的单词。还是上面的例子,如果你将“-”设置为不间断的单词,你只会得到“2022-04-10”的结果。 以下字符可以用作LightDB中的非停止单词。从以下字符中自由选择,以提高其准确性和易于使用全文SERACH。受支持的非停止词列表:

        ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
        

详见Chapter 13

内置的默认值是'',您可以在 lightdb.conf 中更新lightdb_tsearch_non_stopwords值,需要重启后生效。 您还可以在会话期间更新lightdb_tsearch_non_stopwords,可以无需重新启动服务器。从非停止词列表中选择任意字符组合,例如:

        lightdb@postgres=# set lightdb_tsearch_non_stopwords = '@-=:_';
        SET
        lightdb@postgres=# select to_tsvector('this is from lt_hs_tab table logged at 2020-12-21 00:22:32, username=zjh&pwd=balabala www.light-pg');
                                                          to_tsvector                                                   
        ----------------------------------------------------------------------------------------------------------------
        '00:22:32':9 '2020-12-21':8 'log':6 'lt_hs_tab':4 'pwd=balabala':11 'tabl':5 'username=zjh':10 'www.light-pg':12
        (1 row)

        lightdb@postgres=# set lightdb_tsearch_non_stopwords = '';
        SET
        lightdb@postgres=# select to_tsvector('this is from lt_hs_tab table logged at 2020-12-21 00:22:32, username=zjh&pwd=balabala www.light-pg');
                                                                              to_tsvector                                                                       
        ---------------------------------------------------------------------------------------------------------------------------------------------------------
        '-12':11 '-21':12 '00':13 '2020':10 '22':14 '32':15 'balabala':19 'hs':5 'log':8 'lt':4 'pwd':18 'tab':6 'tabl':7 'usernam':16 'www.light-pg':20 'zjh':17
        (1 row)

        

如果lightdb_tsearch_non_stopwords parameter是无效值会报错。比如:

        lightdb@postgres=# set lightdb_tsearch_non_stopwords = '1@';
        ERROR:  invalid value for parameter "lightdb_tsearch_non_stopwords": "1@"
        DETAIL:  lightdb_tsearch_non_stopwords not support '1@' as non stopword.
        

lightdb_tsearch_word_superpose (boolean)

lightdb_tsearch_word_superpose用于叠加使用停止词和非停止词的效果。 例如,如果将lightdb_tsearch_word_superpose设置为on,并将lightdb_tsearch_non_stopwords设置为'-', 则在使用to_tsvector("2022-04-10")时,将同时获得“2022”、“04”、“10”和“2022-04-10”两种结果。 详见Chapter 13

内置的默认值是off,你可以在lightdb.conf中更新lightdb_tsearch_word_superpose的值,需要重启后生效。 你也可以在会话期间更新lightdb_tsearch_word_superpose则无需重启。不支持中文文字。 比如:

        lightdb@postgres=# set lightdb_tsearch_word_superpose = off;
        SET
        lightdb@postgres=# select to_tsvector('this is from lt_hs_tab table logged at 2020-12-21 00:22:32, username=zjh&pwd=balabala www.light-pg');
                                                                              to_tsvector                                                                       
        ---------------------------------------------------------------------------------------------------------------------------------------------------------
        '-12':11 '-21':12 '00':13 '2020':10 '22':14 '32':15 'balabala':19 'hs':5 'log':8 'lt':4 'pwd':18 'tab':6 'tabl':7 'usernam':16 'www.light-pg':20 'zjh':17
        (1 row)

        lightdb@postgres=# set lightdb_tsearch_word_superpose = on;
        SET
        lightdb@postgres=# select to_tsvector('this is from lt_hs_tab table logged at 2020-12-21 00:22:32, username=zjh&pwd=balabala www.light-pg');
                                                                                                                    to_tsvector                                                                    
                                                
        --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        -----------------------------------------
        '-12':33 '-21':34 '00':13,35 '12':11 '2020':10,32 '21':12 '22':14,36 '32':15,37 'balabala':19,41 'hs':5,21,27 'log':8,30 'lt':4,26 'net':22 'pwd':18,40 'tab':6,28 'tabl':7,29 'usernam':16
        ,38 'www':20 'www.light-pg':42 'zjh':17,39
        (1 row)

        

lightdb_encryption_key_command (string)

用于存储透明数据加密的密钥路径,该路径可确保每次重新启动数据后再次读取TDE密钥。

详见Chapter 31

When Transparent Data Encryption is not used, this parameter is null. Only when Transparent Data Encryption is configured, this parameter stores the tde key. 如果未使用透明数据加密,则该参数为NULL。只有配置后该参数才保存TDE密钥。 设置示例如下:

show lightdb_encryption_key_command;
   lightdb_encryption_key_command   
------------------------------------
 /home/lightdb/stage/provide_key.sh
(1 row)
        

nls_date_format (string)

只有在Oracle兼容模式下,lightdb才可以配置nls_date_format来设置sysdatetimestamp的显示输出格式

详见 Section 10.9

必须提前为nls_date_format变量设置系统日期格式。 设置示例如下:

SET nls_date_format = 'YYYY/MM/DD HH24:MI:SS';

select sysdate;
       sysdate       
---------------------
 2022/09/15 10:03:29
(1 row)

select to_char(sysdate);
       to_char       
---------------------
 2022/09/15 10:08:46
(1 row)
        

nls_timestamp_format (string)

只有在Oracle兼容模式下,lightdb才可以配置nls_timestamp_format来设置systimestamptimestamptz的显示输出格式

详见 Section 10.9

您必须提前为nls_timestamp_format变量设置系统时间戳格式。 设置示例如下:

SET nls_timestamp_format = 'YYYY/MM/DD HH24:MI:SS.FF6TZH';

select systimestamp;
         systimestamp          
-------------------------------
 2022/09/15 10:05:56.884814+08
(1 row)
        

lightdb_only_full_group_by (boolean)

仅在MySQL兼容模式下,此参数用于控制msyql的SELECT DISTINCT...ORDER BY语法是否与ONLY_FULL_GROUP_BY以外的msyql语法兼容。 此参数默认值为on.

默认情况下,lightdb将报告SELECT DISTINCT...ORDER BY语法中不一致列的错误:

select distinct a from test_distinct_order_tb1 order by d;
ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: select distinct a from test_distinct_order_tb1 order by d;
                                                                ^
        

只有在MySQL兼容模式和lightdb_only_full_group_by设置off时,上述SQL才能正常执行:

set lightdb_only_full_group_by = off;
SET

select distinct a from test_distinct_order_tb1 order by d;
 a 
---
 3
 1
 2
(3 rows)
        

请注意,这种行为只是一种与MySQL兼容的非标准语法。 它用于确保LightDB中的执行不会报告错误,但不能保证结果与MySQL完全一致。 不建议使用此功能。请使用标准语法格式。

18.12.3. 共享库预载入

为了载入附加的功能或者达到提高性能的目的,可用多个设置来预先载入共享库到服务器中。 例如'$libdir/mylib'设置可能会导致mylib.so(或者某些平台上的mylib.sl)从安装的标准库目录被预装载。这些设置之间的区别在于生效的时间以及改变它们所需的特权。

可以用这个方法预装载LightDB的过程语言库,通常是使用'$libdir/plXXX'语法,其中的XXXpgsqlpl/sql

只有特别为与LightDB一起使用设计的共享库才能以这种方式载入。每一个LightDB支持 的库都有一个魔法块,它会被检查以保证兼容性。由于这个原因,非LightDB无法 以这种方式被载入。你可能可以使用操作系统的工具(如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命令的方式解析。 项之间的空格会被忽略,如果需要在库名中包含空格或者逗号,请把库名放在双引号内。这个参数只在连接开始时起效。 后续的改变没有效果。如果指定的库没有找到,连接尝试将会失败。 只有超级用户能够更改这个设置。

这个特性的意图是允许在特定会话中载入调试用的或者测量性能的库,而不需要显式的给出一个 LOAD命令。例如,通过用ALTER ROLE SET设置这个参数可以 为一个给定用户名下的所有会话启用auto_explain。还有,无需重启 服务器就能更改这个参数(但是只有新会话启动时才会生效),这样可以以这种方式更容易地增 加新模块,即便它们会应用到所有会话。

shared_preload_libraries不同,相对于在库被第一次使用 时载入它,在会话开始时载入库并没有什么性能优势。不过,当使用连接池时这样做还是有一些 优势。

shared_preload_libraries (string)

这个变量指定一个或者多个要在服务器启动时预载入的共享库。 它包含一个由逗号分隔的库名列表,其中每个名称都会按LOAD命令的方式解析。 项之间的空格会被忽略,如果需要在库名中包含空格或者逗号,请把库名放在双引号内。 这个参数只能在服务器启动时设置。 如果指定的库没有找到,服务器将无法启动。

有些库需要执行只能在postmaster启动时发生的特定操作,例如分配共享内存、保留轻量级锁 或者启动后台工作者。这些库必须通过这个参数在服务器启动时载入。每个库的详情请见文档。

其他库也能被预载入。通过预载入一个共享库,当该库被第一次使用时就可以避免库的启动时间。 不过,启动每个新服务器进程的时间可能会略有增加,即使该进程从不使用该库。因此,推荐只 把这个参数用于那些要在大多数会话中使用的库上。还有,改变这个参数要求重启服务器,因此 对于短期的调试任务来说这不是好的选择,应该转用 session_preload_libraries

18.12.4. 其他默认值

dynamic_library_path (string)

如果需要打开一个可以动态装载的模块并且在CREATE FUNCTIONLOAD命令中指定的文件名没有目录部分(即名字中不包含斜线),那么系统将搜索这个路径以查找所需的文件。

dynamic_library_path的值必须是一个冒号分隔的绝对目录路径的列表。如果一个列表元素以特殊字符串开始,$libdir会被替换为LightDB包中已编译好的库目录。这里是LightDB发布提供的模块被安装的位置(使用lt_config --pkglibdir来找到这个目录的名字)。例如:

dynamic_library_path = '/usr/local/lib/lightdb:/home/my_project/lib:$libdir'

这个参数的默认值是'$libdir'。如果该值被设置为一个空字符串,则关闭自动路径搜索。

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