openGauss

开源数据库

openGauss社区官网

开源社区

PostgreSQL与openGauss之关键字

高云龙2020-12-17openGauss与postgresql对比

PostgreSQL 与 openGauss 之关键字

日常数据库运维的过程中可能对数据库关键字关注点并不是很高,但在程序开发的过程中,数据库对象建模要尽可能的避开数据库关键字的使用,否则在后续开发过程中需要用到各种转译的方法来将关键字转换为普通字符,会非常的麻烦。最近在 openGauss 上执行 date 函数后报语法错误,经查询 openGauss 是支持 date 函数的,但却用不了,真对这个问题,分别在 PostgreSQL12.2 数据库和 openGauss(1.0.1)数据库进行问题复现并问题分析。

在 openGauss 执行结果如下:

在 PostgreSQL 执行 date 函数结果如下:

经调查发现是 date 关键字的问题。

在 openGauss 的关键字列表中,虽然不是保留关键字,但是不允许是函数或者类型。

在 PostgreSQL 的关键字列表中,是一个普通字符。

由此问题进行深入思考,对比 PostgreSQL 与 openGauss 数据库中哪些关键字做了差异化说明,避免在日常使用中再次遇到类似问题。

  

PostgreSQL

openGauss

DATE

-

非保留(不能是函数或类型)

IS

reserved (can be function or type)

保留

ISNULL

reserved (can be function or type)

非保留

LATERAL

reserved

-

MAXVALUE

non-reserved

保留

NUMBER

-

非保留(不能是函数或类型)

PROCEDURE

non-reserved

保留

TABLESAMPLE

reserved (can be function or type)

-

XMLNAMESPACES

non-reserved (cannot be function or type)

-

XMLTABLE

non-reserved (cannot be function or type)

-

通过对比两个数据库的保留关键字,在 openGauss 中"date"和"number" 虽然不是保留关键字,但是不可用于函数或类型操作,"isnull"和"LATERAL"变为非保留关键字,"maxvalue"和"procedure"变为保留关键字,“TABLESAMPLE”、“XMLNAMESPACES"及"XMLTABLE”不再做限制。