TDSQL PG 对如下功能做了兼容:
·数据类型
·内建函数
·SQL 语法
·PL/SQL
·系统视图
·系统包
·数据库对象管理
·Oracle 配置参数
一、使用 Oracle 兼容模式
TDSQL PG 内核引擎会根据数据库类型来区分 Oracle 兼容模式与 PG 模式。
在创建数据库的时候使用sql modedb_mode 关键字即可创建一个指定模式的数据库,db_mode 可选 oracle 或 postgresql。不指定即默认 PostgreSQL 模式。
示例:
tdsql=# create database ora sql mode oracle;CREATE DATABASEtdsql=# \\l List of databases Name | Owner | Encoding | Sqlmode | Collate | Ctype | Access privileges —————+——-+———-+———-+————+————+——————- ora | tbase | UTF8 | oracle | zh_CN.utf8 | zh_CN.utf8 | postgres | tbase | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 | tbase_db | tbase | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 | tdsql | tbase | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 | template0 | tbase | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 | =c/tbase + | | | | | | tbase=CTc/tbase template0_ora | tbase | UTF8 | oracle | zh_CN.utf8 | zh_CN.utf8 | =c/tbase + | | | | | | tbase=CTc/tbase template1 | tbase | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 | =c/tbase + | | | | | | tbase=CTc/tbase template1_ora | tbase | UTF8 | oracle | zh_CN.utf8 | zh_CN.utf8 | =c/tbase + | | | | | | tbase=CTc/tbase user1 | user1 | UTF8 | postgres | zh_CN.utf8 | zh_CN.utf8 | (9 rows)
可以看到 ora 数据库的 Sqlmode 列显示 oracle,即表示 ora 数据库当前为 Oracle 模式。
而 tdsql 数据库的 Sqlmode 列显示 postgres,即表示 tdsql 数据库当前为 PostgreSQL 模式。
二、SQL 数据类型
TDSQL PG 兼容了 Oracle 所有常用数据类型。详情参见 SQL 数据类型。
三、内建函数
TDSQL PG 兼容了大部分 Oracle 内建函数。详情参见 内建函数。
四、SQL 语法
TDSQL PG 支持语法说明:
| 序号 | Oracle 数据库 | TDSQL PG 数据库 | 说明 |
| 1 | SELECT | 支持 | 支持单表和多表连接;支持多种 JOIN 连接方式(内连接、外连接);支持子查询;支持层次查询;支持多种窗口函数等。支持多种集合操作:UNION、UNION ALL、INTERSECT、EXCEPT、MINUS 等。支持 EXPLAIN 打印计划。支持 PIVOT、UNPIVOT |
| 2 | INSERT | 支持 | 支持VALUES插入一行或者多行;支持分区表插入;支持INSERT … SELECT插入数据支持同时插入多个目标表(INSERT ALL/FIRST) |
| 3 | UPDATE | 支持 | SET 支持一次更新多列数据 |
| 4 | DELETE | 支持 | 支持删除表数据 |
| 5 | TRUNCATE | 支持 | 支持清空表数据 |
| 6 | 并行查询 | 支持 | 支持并行 INSERT 和 UPDATE |
| 7 | Hint | 支持 | 支持 Hint |
五、PL/SQL
TDSQL PG 支持 PLSQL 语法说明:
| 序号 | Oracle 数据库 | TDSQL PG 数据库 | 说明 |
| 1 | 数据类型 | 支持 | 支持 sql 类型数据类型支持集合和记录类型支持 object 类型支持 oracle 兼容的 pls_integer 和 binary_integer |
| 2 | 流程控制 | 支持 | 支持循环控制逻辑支持条件控制逻辑支持顺序执行逻辑 |
| 3 | 集合类型与记录类型 | 支持 | 支持嵌套表支持关联数组支持可变数组支持记录类型 |
| 4 | 静态 SQL | 支持 | 支持静态 SQL |
| 5 | 动态 SQL | 支持 | 支持动态 SQL |
| 6 | 子过程 | 支持 | 支持包内子过程支持 OBJECT 类型子过程支持创建 FUNCTION 和P ROCEDURE |
| 7 | 触发器 | 支持 | 支持 insert/update/delete/truncate4种类型 DML 触发器支持 alter/drop/create 且出发目标是 database/schema 的 ddl 触发器支持 befor/after/instead of 三种触发时机的触发器 |
| 8 | 异常处理 | 支持 | PL/SQL 中支持异常块,可以便捷地检查和处理错误 |
| 9 | PACKAGE 对象 | 支持 | 支持定义包对象,用来封装一组成员变量和成员函数 |
| 10 | 自定义类型 | 支持 | 支持使用 CREATE TYPE 创建自定义类型 |
| 11 | 游标 | 支持 | 支持隐式游标支持显式游标支持自定义游标类型支持 SYS_REFCURSOR |
| 12 | 函数嵌套声明 | 支持 | 支持在函数/存储过程/匿名块中嵌套定义函数或者存储过程 |
| 13 | PL 系统包 | 支持 | 包括 DBMS_OUTPUT、DBMS_LOB、DBMS_ASSERT、DBMS_ALERT、DBMS_LOCK、DBMS_METADATA、DBMS_RANDOM、DBMS_SESSION 等 |
六、系统视图
支持多个 Oracle 系统视图。请参见 系统视图。
七、系统包
支持多个 Oracle 系统包。请参见 系统包。
八、数据库对象管理
| 序号 | 数据库对象 | TDSQL PG 数据库 | 说明 |
| 1 | 表 | 支持 | 支持创建表,包括临时表和全局临时表。创建表可以指定约束、索引等信息。支持修改表定义。通过 ALTER TABLE 来添加列,修改列类型,增加或者删除默认值、约束等。支持删除表定义。 |
| 2 | 约束 | 支持 | 支持 CHECK、UNIQUE、NOT NULL 约束。支持 PRIMARY KEY 约束。支持 FOREIGN KEY 约束。支持 ALTER TABLE 对约束进行启用、禁用。 |
| 3 | 分区表 | 支持 | 支持 TDSQL PG 语法创建一级和多级分区;不支持用 Oracle 语法方式创建分区表支持 RANGE、LIST、HASH 分区支持分区表的局部索引支持分区表的基本维护:分区表添加分区表删除分区表分裂、合并 |
| 4 | 索引 | 支持 | 支持 BTREE、HASH、BRIN 索引。支持 gist、gin、spgist 索引。支持索引的创建和删除 |
| 5 | 视图 | 支持 | 支持创建和删除视图支持 FORCE VIEW支持简单视图的 DML 操作。不支持多表视图的 DML |
| 6 | 序列 | 支持 | 支持序列的创建和删除支持 NOCACHE、NOORDER 序列 |
| 7 | 同义词 | 支持 | 支持同义词的创建和删除支持对表、视图、同义词等对象创建同义词 |
| 8 | DBLINK | 支持 | TDSQL PG 支持创建、删除 DBLINK支持用 DBLINK 读和写 Oracle 数据库 |