AntDB是基于PG内核国内自主研发的一款开源分布式数据库,兼容oracle语法。这里简单介绍一下使用oracle语法的三种方法。
第一种:服务器级别,修改数据库配置文件默认为oracle语法
通过集群管理工具设置语法
postgres=# set coordinator all(grammar = oracle);
SET PARAM
设置过后,会在相应coordinator的配置文件postgresql.conf中写“grammar = oracle”。此时可以直接执行oracle语法。
[shan2@localhost1 0]$ psql -d postgres -p 4335
psql (3.1devel 7b91fbb based on PG 9.6.2)
Type "help" for help.
postgres=# select months_between(to_date('2017-4-30','yyyy-mm-dd'),to_date('2017-3-30','yyyy-mm-dd')) from dual;
months_between
----------------
1
(1 row)
第二种:会话级别,设置session级别参数指定oracle语法
postgres=# set grammar to oracle;
SET
postgres=# select months_between(to_date('2017-4-30','yyyy-mm-dd'),to_date('2017-3-30','yyyy-mm-dd')) from dual;
months_between
----------------
1
(1 row)
对比:把会话级别参数修改到postgres,则不支持oracle语法。
postgres=# set grammar to postgres;
SET
postgres=# select months_between(to_date('2017-4-30','yyyy-mm-dd'),to_date('2017-3-30','yyyy-mm-dd')) from dual;
ERROR: function months_between(date, date) does not exist
LINE 1: select months_between(to_date('2017-4-30','yyyy-mm-dd'),to_d...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
postgres=#
第三种:语句级别, 通过/*ora*/或/*oracle*/等前缀注释指定按Oracle语法执行SQL
postgres=# /*ora*/ select months_between(to_date('2017-4-30','yyyy-mm-dd'),to_date('2017-3-30','yyyy-mm-dd')) from dual;
months_between
----------------
1
(1 row)
目前,ADB支持大部分常用oracle函数的语法,上面只是以months_between函数为例说明。下面的表格是ADB与Oracle的功能对比。
指标
|
ADB
|
Oracle
|
类型
|
关系型数据库
|
关系型数据库
|
架构
|
分布式 share nothing
|
集中式 share everything
|
多线程or多进程
|
多进程
|
多进程
|
License费用
|
完全开源
|
按照CPU核数收费,价格昂贵
|
SLA
|
7x24,一般问题不会过夜,重大严重问题不会超过两天
|
一般用户MOS发起sr,高级用户联系SSC/ACS部门,现场服务每人日8000RMB(8小时,加班2倍,节假日3倍)
|
高可用
|
hot standby
|
Active Data Guard
|
容灾
|
自研双向同步工具
|
底层存储复制、flashcopy等
|
数据分片
|
支持
|
12.2版本开始提供,未发布,细节不详
|
导出导入
|
pg_dump/pg_dumpall/pg_restore
|
exp/expdp/imp/impdp
|
备份恢复管理
|
barman
|
rman
|
基于时间点的恢复(PITR)
|
支持
|
支持
|
归档
|
支持
|
支持
|
分布式事务控制
|
支持
|
支持
|
可视化监控展示
|
ADBmonitor
|
Oracle EM
|
命令行客户端
|
psql
|
sqlplus
|
官方图形化客户端
|
pgadmin
|
sqlpldeveloper
|
JDBC接口
|
支持
|
支持
|
C/C++接口
|
libpq
|
OCI
|
功能扩展
|
需要的功能几乎均能在社区找到相应的插件,非常方便
|
不支持
|
Oracle迁移
|
Oracle语法85%兼容,应用几乎无需改写代码
|
|
稳定性
|
普通x86上大量严格的暴力边界测试,
生产环境持续稳定的运行
|
多年的商业数据库,稳定性不错
|
水平扩缩容
|
很方便的在集群中添加删除node
|
rac架构添加实例,依然需要share everything
|
多租户(在一个实例中创建多个database)
|
原生支持
|
12c版本开始支持
|
dblink
|
支持
|
支持
|
查询其他类型数据库
|
丰富的fdw插件
|
oracle gateway
|
double cache
(db cache && os cache)
|
支持
|
不支持
|
资源控制(类似linux的limit)
|
支持
|
支持
|
访问控制
|
pg_hba.conf文件
|
sqlnet.ora
|
数据undo
|
MVCC
|
undo tablespace
|
数据redo
|
WAL log
|
online redo log
|
数据完整性约束(包括主键、外键、唯一、check等约束)
|
支持
|
支持
|
存储过程/函数/触发器
|
支持
|
支持
|
数据库内部job
|
pg_cron
|
dbms_job/dbms_scheduler
|
用户自定义类型
|
支持
|
支持
|
秒以下的时间类型
|
支持
|
支持
|
自增字段
|
支持
|
不支持
|
物化视图
|
支持
|
支持
|
序列
|
支持
|
支持
|
非结构化数据
|
支持json格式
|
不支持
|
空间地图数据
|
支持
|
不支持
|
XML
|
支持
|
支持
|
全文搜索
|
支持
|
支持
|
复杂查询
|
支持
|
支持
|
子查询(包括简单子查询和标量子查询)
|
支持
|
支持
|
并行查询
|
2.3版本支持
|
支持
|
局部索引
|
有
|
无
|
复合索引
|
支持
|
支持
|
位图索引
|
不支持
|
支持
|
函数索引
|
支持
|
支持
|
分析函数
|
支持
|
支持
|
分区表
|
通过继承表实现
|
丰富的分区特性
|
窗口函数
|
支持
|
支持
|
外部函数(使用C/Python等语言在DB中编写函数)
|
支持
|
支持
|
表连接类型
|
nest loop/hash join/sort merge join
|
nest loop/hash join/sort merge join
|
性能优化工具与度量信息
|
丰富的日志信息和表、索引的统计信息
|
awr和ash提供了丰富的诊断信息
|
优化器提示信息
|
安装插件pg_hint_plan后支持
|
原生丰富的hint提示
|
关于AntDB的具体信息,请见下面的链接。
代码地址:
https://github.com/ADBSQL/AntDB
QQ交流群:496464280