Skip to content

KunlunBase 与 PG 的兼容

kunlundb edited this page Jul 13, 2022 · 1 revision

KunlunBase 支持大多数 PostgreSQL 功能,下文列出的功能点除外。

一、不支持的功能特性

1. 触发器

2. 外键

3. 表继承

4. 用户自定义类型(enum除外)及其继承

5. Domain

6. 物化视图(后续可以支持)

7. XML数据管理

8. 对象数据库相关功能

9. 数组类型

10. 数据流式复制,包括基于 WAL 的物理复制以及逻辑复制

11. 数据表和索引的存储相关选项

  • create table 语句的所有 'storage params'(存储参数),以及表空间设置。这些选项会被忽略并返回警告消息给客户端。
  • exclude约束:忽略并返回警告
  • 索引的include字段
  • 分区表的default分区:不支持
  • 'create table select from'语句
  • 针对数据表的存储管理操作,包括 cluster, vacuum, reindex, analyze, etc

这些操作不可以针对用户数据表执行操作,可以针对计算节点本地存储的元数据表执行操作。

12. create index高级功能

KunlunBase不支持这些索引选项和功能:

  • 表达式作为索引字段
  • partial index(忽略某些数据行不为它们插入索引行)
  • CONCURRENT选项:忽略
  • include子句:忽略
  • 'COLLATE'子句 :禁止,
  • 'nulls first' / 'nulls last' :禁止指定,总是使用MySQL的默认方式,与 PostgreSQL的默认方式刚好相反。
  • opclass:禁止
  • hash索引类型:mysql不支持,及时指定了,仍然使用b+tree
  • rtree索引类型:不支持
  • 'exclude'子句:不支持

13. create / alter database 的存储相关选项

ALTER TABLE不支持的功能 KunlunDB自动忽略这些选项:

  • SET { WITH | WITHOUT } OIDS
  • SET { LOGGED | UNLOGGED }
  • 列和表级别的外键约束
  • CLUSTER 选项:CLUSTER ON index_name SET WITHOUT CLUSTER
  • 触发器选项
  • DISABLE TRIGGER [ trigger_name | ALL | USER ]
  • ENABLE TRIGGER [ trigger_name | ALL | USER ]
  • 自定义约束
  • ADD CONSTRAINT ALTER CONSTRAINT VALIDATE CONSTRAINT
  • 对表空间和存储参数的修改
  • 流复制设置(含有REPLICA关键字的子句)

二、与 PG 有差异的功能特性

1. 加列 ALTER TABLE ADD COLUMN

对已有的表新加的列,如果有缺省值的话,缺省值不可以是MySQL无法执行的表达式,只能是常量或者MySQL可以执行的表达式。例如,表达式中的函数和运算符必须在mysql中存在和支持。

另外,如果这个新增列是sequence类型,那么这个表只能新增一列这样的sequence列,因为KunlunDB会使用mysql的自增列为已有的行的新字段赋值。而mysql的每个表只允许一个自增列。

2. 索引的 'nulls first' / 'nulls last'

总是使用MySQL的默认方式,与PostgreSQL的默认方式刚好相反。

3. 数据类型支持

  • 时间戳的有效范围缩小到了 [ '0000-01-01 00:00:00.000000' , '9999-12-31 23:59:59.999999' ].
  • 日期类型的有效范围缩小到了 [ '0000-01-01' , '9999-12-31' ].
Clone this wiki locally