摘要:背景 在 Oracle 中用户在 drop table 的时候,表文件并不会从磁盘上移除,而是表被重命名为一个特殊的名字,然后用系统表记录。该功能被称为回收站功能。和 Windows 回收站类似,用户可以从回收站中恢复删除的表。 在 Lightdb 24.2 中支持了该功能。 参考: Oracle
阅读全文
摘要:背景 在如下的 sql 中, select rowid from (select 1 from t); lightdb 24.1 以前会直接报错,说找不到 rowid 列。为了兼容 Oracle, 在 24.1 中,我们选择将告知子查询除了返回子查询应有的列之外,还需返回 rowid 列。 样例 以
阅读全文
摘要:背景 Oracle 中支持很多种分区管理操作。其中 merge partitions 会将多个连续分区合并成一个分区。lightdb 24.1 中支持了该功能。 merge partitions 功能支持 list 和 range 分区,不支持 hash 分区。 用例 range 分区 CREATE
阅读全文
摘要:背景 Oracle 的 Raw 类型可以进行位操作,在 lightdb 24.1 中,对其中的函数:bit_and, bit_or, bit_xor, bit_complement 四个函数进行了改进:这些函数有了 strict 属性,即输入参数如果有 null, 则直接返回 null。 用例 bi
阅读全文
摘要:背景 Oracle 的 timestamp_to_scn 函数能根据时间戳返回一个 SCN(System Change Number). scn 与事务有关,当系统有事务提交后,最新的 scn 就会变更成一个更大的值。 ORA_ROWSCN 在 Oracle 中记录了每一行提交后的 scn. 在 L
阅读全文
摘要:背景 Oracle 的 create view 语句可以带有 WITH READ ONLY 选项。为了使 Oracle 的 sql 代码更方便迁移到 LightDB 中,24.1 版本中新增了 WITH READ ONLY 语法。目前用户不能在只读视图上执行 update/insert 操作更新基表
阅读全文
摘要:背景 lightdb 为兼容 Oracle 的存储过程创建了 plorsql 核心插件。在 lightdb 23.4 及之前版本,plorasql 存储过程只支持基本的语法校验(check_function_bodies = on 时)。从 lightdb 24.1 版本开始,lightdb 新增
阅读全文
摘要:背景 在 Mysql 的建表语法中,用户可以使用 index 关键字指定列名作为索引。在 LightDB 24.1 中支持了该语法的部分特性。 用例 -- use default index name create table foo(a int, index (a)); -- create uni
阅读全文
摘要:背景 在 Oracle 中,>=, <=, !=, <> 操作符字符之间允许存在空格。为兼容这种特性,LightDB 24.1 中对这些比较操作符作了特殊处理。 用例 select count(*) from dual where 1 > = 1; select count(*) from dual
阅读全文
摘要:背景 在 Oracle 中,用户自定义的无参函数可以不带括号执行。为支持该特性,LightDB 24.1 版本中,允许用户使用无参函数的函数名调用函数,包括系统函数,如:now. 此功能限制在 LightDB 的 oracle 数据库下运行。 用例 create function fn_nopara
阅读全文
摘要:背景 在 Oracle 和 PostgreSQL 中 datetime 标识符并没有作为关键字,也不是数据类型。在 Mysql 中,datetime 是数据类型名,但并不是保留关键字。在 LightDB 23.4 及以前版本中,datetime 被误当成可以作为列名的关键字,导致 Oracle 用户
阅读全文
摘要:背景 在 Oracle 中,长度为 0 的字符串被视为 NULL. 下文中长度为 0 的字符串被称为 EMPTY_STRING. 而 PostgreSQL 能够区别对待 EMPTY_STRING 和 NULL. 为了兼容 Oracle 的行为,在 LightDB 23.4 版本前,已经基本将 EMP
阅读全文
摘要:## 背景 lightdb 在为了兼容 oracle 和 mysql 语法,,在 postgresql 原有的建表选项上新增了一些选项并自定义了一些选项: 1. compress/nocompress 2. logging/nologging 3. with primary key 4. distr
阅读全文
摘要:背景 目前,lightdb 在兼容 oracle,目标是 oracle 用户不用修改 sql 代码无缝切换到 lightdb 数据库。为此,lightdb 结合开源 orafce 插件和内核级支持,实现用户的良好体验。在 lightdb 版本 LightDB1.0.V202303.00.000中,新
阅读全文
摘要:## 背景 在 Oracle 中,在旧表上用 `alter table` 命令一次添加多列是可以把列定义放在要括号里的,而 lightdb 之前版本 `alter table` 命令必须要多次执行 `add ...`. 此次版本允许 lightdb 有同样功能。LightDB 版本为 `LightD
阅读全文
摘要:## 背景 lightdb 目前兼容 mysql, oracle 语法。为了提醒用户正在使用的是哪种类型的数据库,lightdb 在 ltsql 端增加了连接提示。 用户在初次连接数据库或在 ltsql 内切换数据库时,会打印一条消息提示。该功能出现在 lightdb 版本:`LightDB1.0.
阅读全文
摘要:本文主要分析 lightdb 全局临时表实现时使用到的函数 `ltgtt_create_temp_table`. 1. 通过 `makeNode` 函数创建 `TableLikeClause` 和 `CreateStmt`. ```sql create table lt_gtt_schema_123
阅读全文
摘要:通过[这篇文章](https://www.cnblogs.com/lddcool/p/lightdb_node_script.html),我搭建了一个单机分布式集群。在该集群内,可以通过下面这条 sql 语句将普通的带有主键的表改为分布式表: ```sql -- 'id' 为表 'test_tabl
阅读全文
摘要:# 简介 全局临时表(Global Temporary Table)是数据库中一种特殊类型的表,它在创建时与特定的会话无关,并且可以被多个会话共享和访问。全局临时表的数据只在当前数据库会话的生命周期内可见,并且在会话结束后自动销毁。 全局临时表通常用于临时存储中间结果集或临时数据,以便在会话内部或会
阅读全文
摘要:本文章主要介绍我在部署 lightdb 单机多实例集群过程中开发的 shell 脚本,方便后续快速搭建集群。在搭建集群过程中我主要参考了以下文档。 参考文档 lightdb distributed guide 分布式组件 canopy 高可用组件 ltcluster 脚本 node.sh 该脚本运行
阅读全文