标签
PostgreSQL , PPAS , EPAS , edb , enterprisedb , Oracle , 兼容性 , 优缺点
背景
EPAS为EDB的PostgreSQL Oracle兼容企业版,基于PostgreSQL社区版本开发,2004年发布了第一个Oracle兼容版,已经在ORACLE兼容性上耕耘了15年。
2018年推出EPAS 11 版本,完成了 Oracle 11g, 12c 认证。
2016年阿里云与EDB合作,推出阿里云RDS PPAS,兼容Oracle。
2018年阿里云与EDB代码级深度合作,即将推出POLARDB O,计算存储分离,云原生Oracle兼容数据库。
PG 、 PPAS 兼容性对比
功能 | PPAS | PG社区版 |
---|---|---|
Oracle pl/sql | 支持 | 不支持 |
Oracle pl/sql 自治事务 | 11以上版本支持 | PG 11支持 |
Oracle 内置 package | 26种,440个package func (df dbms) | 13种,通过orafce支持兼容。(实际使用体验较弱,因package会结合plsql使用) |
自定义 Oracle package | 支持 | 不支持 |
自定义 Oracle 对象 | 支持 | 不支持 |
Oracle 系统视图 | 支持 | 不支持 |
Oracle 内置函数 | 大量支持 | 少量兼容通过orafce插件 |
Oracle 兼容类型 | 支持 | 少量兼容通过orafce插件 |
Oracle pl/sql 嵌套表 | 支持 | 不支持 |
Oracle pl/sql bulk collect bind | 支持 | 不支持 |
Oracle sql语法 | 大部分支持 | 少部分兼容,其他需修改 |
Oracle 分区表语法 | 支持 | 不支持 |
Oracle VPD(RLS) | 支持 | 不支持,需修改语法 |
sql 防火墙 | 支持 | 不支持 |
索引推荐 | 支持 | 不支持 |
资源隔离(Resource manage) | 支持 | 不支持 |
客户端驱动 | oci,proc,spl,jdbc,.net,odbc兼容 | 不兼容oci,proc |
Oracle SQL*Load | 支持 | 不支持,可以使用pgbulkload或copy代替 |
Oracle 存储过程加密 | 支持 | 不支持 |
Oracle rowid | 支持 | 不支持Oracle rowid 语法(使用ctid或oid代替) |
Oracle 迁移评估 | 支持 | 支持较弱(ora2pg) |
Oracle 转化ddl,全量同步到ppas,pg | ADAM | ADAM |
Oracle 增量同步到ppas,pg | ADAM | ADAM |
Oracle 不兼容SQL,DDL的自动转换 | ADAM | ADAM |
Oracle 兼容性评估,改造工作量评估,自动拆库,风险揭示,ppas优势特性揭示,不兼容DDL/SQL转换,结构,数据迁移,一致性校验,优化,仿真回放,一键迁移 | ADAM | ADAM |
详细兼容性请参考内容PDF
PPAS 兼容性需补齐
以下取自 Oracle vs EDB EPAS 技术对比白皮书
1、全局临时表
《PostgreSQL Oracle 兼容性之 - 全局临时表 global temp table》
2、分区表支持:INTERVAL PARTITIONING
3、分区表支持:PARTITIONED INDEXES
4、bitmap索引, 当前使用gin索引代替
5、flashback query
6、flashback table, database and transaction query
7、RAC
8、in-memory database
9、data masking
10、database vault
11、xml_db
12、高级压缩
13、TRANSPORTABLE CROSS-PLATFORM TABLE SPACES
14、ONLINE REORGANIZATION, 改语法实现(readme)
15、merge 语法, upsert代替
Oracle 、 PPAS 对比
PPAS 优势特性(已列举43项优势特性)
功能 | Oracle | PPAS |
---|---|---|
多模-时空 | 支持 | 支持 (ganos, postgis, pgrouting, pgpointcloud) |
多模-图像处理 | 不支持 | 支持 imgsmlr |
多模-JSON | 支持 | 支持 (带索引加速) |
多模-全文检索 | 不支持 | 支持(分词、索引、自定义分词、rank等 带索引加速)实时BUILD |
多模-文本相似 | 不支持 | 支持(带索引加速) |
多模-向量相似计算 | 不支持 | 支持 (cube插件) |
多模-图谱数据处理 | 支持 | 支持 |
多模-多维 | 不支持 | 支持 (cube插件) |
多模-路由 | 不支持 | 支持 (pgrouting插件) |
多模-流计算 | 不支持 | 支持 (pipelinedb插件) |
性能-JIT | 不支持 | 支持 |
性能-向量计算 | 不支持 | 支持 |
性能-GPU加速 | 不支持 | 支持 (ganos, pg_strom插件) |
索引-分区索引 | 支持 | 间接支持 (partial index) |
索引-分区表全局索引 | 支持 | 不支持 |
索引-btree | 支持 | 支持 |
索引-hash | 支持 | 支持 |
索引-gin | 不支持 | 支持(倒排索引) |
索引-gist | 支持 | 支持 |
索引-spgist | 不支持 | 支持 |
索引-brin | 支持(仅Oracle一体机) | 支持 |
索引-bloom | 不支持 | 支持 |
索引-rum | 不支持 | 支持 |
索引-zombodb | 不支持 | 支持 |
索引-表达式索引 | 不支持 | 支持 |
索引-bitmap | 支持 | 不支持 (使用gin代替) |
索引-部分索引 | 不支持 | 支持 |
高级功能-机器学习 | 不支持 | 支持 (madlib) |
高级功能-sharding | 支持 | 支持 (citus) |
高级功能-ddl事务 | 不支持 | 支持 |
高级功能-异构外部表 | 支持不完全 | 几乎支持任意外部数据源(FDW方式) |
内置编程语言-plpgsql | 不支持 | 支持 |
内置编程语言-plpython | 不支持 | 支持 |
内置编程语言-plperl | 不支持 | 支持 |
内置编程语言-pllua | 不支持 | 支持 |
内置编程语言-pljava | 不支持 | 支持 |
内置编程语言-pltcl | 不支持 | 支持 |
高级类型-数组 | 不支持 | 支持 |
高级类型-range | 不支持 | 支持 |
高级类型-xml | 不支持 | 支持 |
高级类型-网络 | 不支持 | 支持 |
高级类型-大对象 | 支持 | 支持 |
高级类型-字节流 | 支持 | 支持 |
高级类型-比特流 | 不支持 | 支持 |
高级类型-图像 | 不支持 | 支持 |
高级类型-向量 | 不支持 | 支持 |
复制-物理流 | 支持 | 支持 |
复制-逻辑流 | 支持 | 支持 |
复制-任意多副本 | 不支持 | 支持(quorum based replication) |
复制-内部订阅 | 不支持 | 支持 |
优化器-动态优化 | 支持 | 支持 (通过pg_aqo插件) |
优化器-join遗传算法 | 不支持 | 支持 |
优化器-hash join | 支持 | 支持 |
优化器-merge join | 支持 | 支持 |
优化器-nestloop join | 支持 | 支持 |
优化器-游标 | 支持 | 支持 |
并行-scan | 支持 | 支持 |
并行-index scan | 支持 | 支持 |
并行-index only scan | 支持 | 支持 |
并行-bitmap scan | ? | 支持 |
并行-filter | 支持 | 支持 |
并行-sort | 支持 | 支持 |
并行-agg | 支持 | 支持 |
并行-write (create table, select into, create index) | ? | 支持 |
并行-join | 支持 | 支持 |
安全-存储过程加密 | 支持 | 支持 |
安全-SQL防火墙 | 支持 | 支持 |
安全-VPD | 支持 | 支持 |
安全-审计 | 支持 | 支持 |
安全-数据库ACL | 支持 | 支持 |
安全-认证方法 | 少量 | 大量(md5,peer,ident,trust,reject,password,ldap,ad,gssapi,radius,pam,bsd,sspi) |
扩展-过程语言扩展 | 不支持 | 支持 |
扩展-FDW | 不支持 | 支持 |
扩展-采样 | 不支持 | 支持 |
扩展-自定义扫描 | 不支持 | 支持 |
扩展-自定义REDO | 不支持 | 支持 |
扩展-自定义索引方法 | 不支持 | 支持 |
扩展-自定义类型、OP、UDF | 支持 | 支持 |
衍生产品-derived db | 无 | 数不胜数(https://wiki.postgresql.org/wiki/PostgreSQL_derived_databases) |
详细兼容性请参考内容PDF
4、EDB EPAS 兼容性手册-sql referencce
6、Oracle 兼容性评估,改造工作量评估,自动拆库,风险揭示,ppas优势特性揭示,不兼容DDL/SQL转换,结构,数据迁移,一致性校验,优化,仿真回放,一键迁移
小结
1、覆盖SQL语法(深度兼容,例如connect by,分区表。)、数据类型、函数、包(支持多达26个package,440种方法)、索引类型、操作符、样式、自定义pl/sql 存储过程、函数、包、客户端驱动(OCI)、客户端编程(Pro*C)。
2、兼容4320个ORACLE独有对象(覆盖类型、包、函数、存储过程、视图、同义词、系统表、序列、动态视图等)。
3、兼容数十项ORACLE高级功能(包括VPD,分区表、物化视图、同义词、DBLINK、高级队列、JOB、PROFILE、AWR、PDB、策略、SQL防火墙、OCI驱动、Pro*C等)。
阿里云PPAS(EDB EPAS)在Oracle兼容性,高级功能方面有非常强的优势,是企业平滑去O的首选。