发布日期:. 2022年4月6日
此版本相对于LightDB 13.3-21.3包含了多种更改。
增强了Oracle兼容性,并添加了下面许多新功能。
如果在SELECT FROM子句中只使用了一个子查询,则不需要使用AS子句来显式指定子查询的别名。 有关更多详细信息,请参见 SELECT。
您可以在UPDATE和DELETE语句的WHERE子句中使用ROWNUM作为过滤条件来指定要更新或删除的行,例如:
UPDATE mytable SET column = value WHERE ROWNUM = rownum; DELETE FROM mytable WHERE ROWNUM = rownum;
您还可以使用ROWNUM为表的每一行分配唯一值,例如:
UPDATE mytable SET column = ROWNUM;
要使用此功能,您需要将 lightdb_syntax_compatible_type设置为oracle,例如:
SET lightdb_syntax_compatible_type = 'oracle';
有关更多详细信息,请参见 Section 8.9。
支持MERGE
语法,MERGE
使用data_source
对target_table_name
中的行进行修改操作。
MERGE
提供了一个单一的SQL语句,可以有条件地INSERT
或UPDATE
行,这是一项
否则需要多个过程语言语句才能完成的任务。有关更多详细信息,请参见
MERGE。
支持SYSTIMESTAMP函数,SYSTIMESTAMP返回所在数据库系统的日期,包括小数秒和时区。返回类型为TIMESTAMP WITH TIME ZONE。例如:
SELECT SYSTIMESTAMP FROM DUAL; SELECT TO_CHAR(SYSTIMESTAMP, 'SSSSS.FF') FROM DUAL;
有关更多详细信息,请参见 Section 10.9.4。
如果您已将 lightdb_syntax_compatible_type设置为oracle,则表达式"value || NULL"的结果将是value,否则结果将为NULL。
如果您已将 lightdb_syntax_compatible_type设置为oracle,则表达式"''::text is NULL"的结果将为true,否则结果将为false。
orafce扩展中的LISTAGG函数现在支持DISTINCT和WITHIN GROUP语法,您可以像这个例子一样使用它:
SELECT LISTAGG(DISTINCT column, ',') WITHIN GROUP (ORDER BY column) FROM mytable;
有关更多详细信息,请参见 orafce。
为SELECT语句添加了新关键字MINUS,并作为EXCEPT的别名,它们是完全等价的。有关更多详细信息,请参见 SELECT。
已删除GUC参数lightdb_enable_rowid和lightdb_enable_rownum,并将 lightdb_syntax_compatible_type设置为oracle代替。
pg_hint_plan增强了,添加了几个新的提示,例如USE_HASH_AGGREGATION、Semijoin、Antijoin和Swap_join_inputs。 此外,它还实现了对分布式数据库的canopy支持。有关更多详细信息,请参见 lthint_plan。
支持透明数据加密(TDE)。只能通过在使用lt_initdb生成数据目录时指定-K选项来启用TDE,该选项接受一个32字节的十六进制密钥字符串,用于加密和解密。 有关更多详细信息,请参见 encryption key command。
添加新扩展模块lt_sm,以支持sm2、sm3和sm4加密。lt_sm是LightDB的一个扩展模块,提供了一系列函数,用于sm2、sm3和sm4加密算法。可以使用上述函数加密和解密数据。 有关更多详细信息,请参见 lt_sm。
添加了新的GUC参数 lightdb_tsearch_non_stopwords和 lightdb_tsearch_word_superpose,用于全文搜索。
LightDB全文搜索有许多内置的停用词。由停用词连接的词将被to_tsvector函数拆分为多个独立的单词,例如,"2022-04-10"将被拆分为"2022"、"04"和"10"。
lightdb_tsearch_non_stopwords 用于自定义非停用词,它与停用词相反,即非停用词被视为单词的一部分,因此不会被to_tsvector函数拆分为多个独立的单词。 仍然以上面的例子为例,如果将"-"设置为非停用词,则只会得到一个"2022-04-10"的结果。
lightdb_tsearch_word_superpose 用于覆盖使用停用词和非停用词的效果。例如,如果将lightdb_tsearch_word_superpose设置为on,并将lightdb_tsearch_non_stopwords设置为"-", 在使用to_tsvector("2022-04-10")时将同时得到包括"2022"、"04"、"10"和"2022-04-10"的结果。
有关更多详细信息,请参见 Section 13.1.3。
添加新的GUC参数 lt_ring_buffers ,用于设置在每个数据库会话中用于环形缓冲区的最大内存量。当运行需要访问大量页面(超过shared_buffers的总页面数量的四分之一)的顺序扫描查询时,会使用一种特殊的访问策略称为bulk-read。只有被这种扫描所触及的页面不太可能再次被需要,因此,不会清除整个缓冲区,而是分配一个由lt_ring_buffers指定的小环形缓冲区,并将这些缓冲区重复使用于整个扫描过程中。这也意味着这种语句所引起的大部分写入流量将由后端本身完成,而不是推到其他进程上。
pg_profile增强,添加了名为DBCpu的等待事件类型(wait_event_type),它表明用户活动在数据库上花费了多少CPU时间。有关更多详细信息,请参见 ltprofile。
pg_cron增强,支持三种任务调度模式:asap、下一个时间间隔和固定时间间隔。
asap: 每个任务仅创建一个会话并对应一个任务队列,多个任务可以存储在队列中。如果后续调度周期在当前任务执行期间到来,则它们将被放入队列中。同时,当前执行将逐个完成队列中的所有任务。
next interval: 每个任务仅创建一个会话并对应一个任务队列,只有一个任务存储在队列中。如果后续调度周期在当前任务执行期间到来,则它们不会被放入队列中,而是在当前任务执行后的下一个调度周期。
fixed interval: 此模式类似于next interval,但区别在于,如果后续调度周期在当前任务执行期间到来,则将为后续调度创建单独的会话以执行,即多个调度任务将并行执行,但最大并行执行数为cron.max_connections_per_task。
另外,还添加了任务超时功能。如果任务执行时间超过指定的最大时间,则任务将被强制中断,并且cron.job_run_details将记录相关的错误消息。默认超时时间为15秒,由cron.task_running_timeout确定。此参数只在数据库启动时生效。
详见 lt_cron。
添加新的GUC参数pg_prewarm.lt_autoprewarm_dbs
、pg_prewarm.lt_autoprewarm_tables
和pg_prewarm.lt_autoprewarm_indexes
用于pg_prewarm扩展,在LightDB启动时自动选择性预热指定的数据库、表和索引。
详见
lt_prewarm。
Canopy扩展现在默认启用。
新的pg_show_plans扩展已集成,默认情况下处于禁用状态。 详见 lt_show_plans。
执行CREATE INDEX时自动执行ANALYZE以收集统计信息。
UPDATE和DELETE语句允许使用LIMIT子句来限制将被更新和删除的行数,例如:
UPDATE mytable SET column = value LIMIT n; DELETE FROM mytable WHERE column > value LIMIT m, n;
如果您使用函数(包括内置函数和用户定义函数)来指定CREATE TABLE语句中的列的默认值,则函数参数可以是其他列名、变量名和包含其他列名和变量名的表达式,例如:
CREATE FUNCTION myfunc(v integer) RETURNS integer AS $$ BEGIN RETURN v + 10; END; $$ LANGUAGE plpgsql; CREATE TABLE mytable ( id int default 10, key int default myfunc(id), v1 int default key, v2 int default key + myfunc(key) );
当使用"CREATE TABLE AS SELECT colname AS alias"创建表时,不允许使用ltapk作为别名。 详见 CREATE TABLE(含分布式)。
lt_standby_forward (EXPERIMENTAL)
是一个模块,它将SQL语句从热备机转发到主机,提供了一种减轻主机负载的方法,并允许客户端从热备机查询。例如,客户端可以将INSERT、CREATE发送到热备机。详见
lt_standby_forward。
ltsql的sqlprompt格式已更改为username@database。