技术编程openGauss魔改PG?它能兼容Oracle的数据库表吗?( 四 )


postgres=# CREATE TABLE t_hash_partition
(deptno NUMBER, deptname VARCHAR(32))
PARTITION BY HASH(deptno)
(PARTITION p1 TABLESPACE pg_default, PARTITION p2 TABLESPACE pg_default,
PARTITION p3 TABLESPACE pg_default, PARTITION p4 TABLESPACE pg_default);
ERROR: syntax error at or near "HASH"
LINE 2: PARTITION BY HASH(deptno)
4、复合分区
对于分区表来说 , 数据倾斜的问题通常是最头疼的 。 为了解决这个问题 , Oracle提供了复合分区的功能 。 复合分区是先使用范围分区 , 然后在每个分区内再使用散列分区/列表分区的一种分区方法 。 不过目前版本openGauss无法支持复合分区 。
postgres=# CREATE TABLE t_sub_partition
( dept_no number, country varchar2(20), sale_date date)
PARTITION BY RANGE(sale_date)
SUBPARTITION BY LIST(country)
( PARTITION q1_2012 VALUES LESS THAN('2012-Apr-01')
( SUBPARTITION q1_europe VALUES ('FRANCE', 'ITALY'),
SUBPARTITION q1_asia VALUES ('INDIA', 'PAKISTAN'),
SUBPARTITION q1_americas VALUES ('US', 'CANADA') ),
PARTITION q2_2012 VALUES LESS THAN('2012-Jul-01')
( SUBPARTITION q2_europe VALUES ('FRANCE', 'ITALY'),
SUBPARTITION q2_asia VALUES ('INDIA', 'PAKISTAN'),
SUBPARTITION q2_americas VALUES ('US', 'CANADA') ),
PARTITION q3_2012 VALUES LESS THAN('2012-Oct-01')
( SUBPARTITION q3_europe VALUES ('FRANCE', 'ITALY'),
SUBPARTITION q3_asia VALUES ('INDIA', 'PAKISTAN'),
SUBPARTITION q3_americas VALUES ('US', 'CANADA') ),
PARTITION q4_2012 VALUES LESS THAN('2013-Jan-01')
( SUBPARTITION q4_europe VALUES ('FRANCE', 'ITALY'),
SUBPARTITION q4_asia VALUES ('INDIA', 'PAKISTAN'),
SUBPARTITION q4_americas VALUES ('US', 'CANADA') ) );
ERROR: syntax error at or near "SUBPARTITION"
LINE 3: SUBPARTITION BY LIST(country)七、嵌套表
嵌套表类似C语言中的结构体 , 可以把一个表结构定义为一个类型 , 在创建其他表的时候 , 可以将字段类型指向这个自定义类型 。 openGauss中可以通过create type进行嵌套表定义 。
postgres=# CREATE TYPE t_type AS (f1 int, f2 text);
CREATE TYPE
postgres=# CREATE TABLE t_compfoo(a int, b t_type);
CREATE TABLE总结
总体而言 , openGauss兼容Oracle常用表类型 , 索引组织表需要用集群索引方式进行改造 。 对于少数非常用数据类型 , 需要进行少量代码改造 , 可采取下列替代方案进行替换 。
技术编程openGauss魔改PG?它能兼容Oracle的数据库表吗?
本文插图
【技术编程openGauss魔改PG?它能兼容Oracle的数据库表吗?】openGauss可替代Oracle吗?从字段类型说起……


推荐阅读