更新时间:2025-10-11 GMT+08:00

与PostgreSQL的差异

DWS与PostgreSQL的差异基于PostgreSQL 9.X版本整理,具体差异如下:

客户端差异

DWS gsql相较于PostgreSQL psql做了如下安全加固变更:

  • 取消通过元命令\password设置用户密码。
  • 新增元命令\i+、 \ir+、\include_relative+和输入输出参数-k,以支持给导入导出的文件加密。
  • 取消打印命令行历史到文件的元命令\s。
  • 涉及敏感操作SQL历史不再记录,如含有密码操作。即用户通过翻页/上下键查阅SQL历史将不能查到对应的记录。
  • 支持连接后在屏幕上给出用户密码过期提示以及版本信息。

gsql在psql基础上还增加了如下功能:

  • 新增输出格式参数-r。支持用户输入命令时的tab补齐和方向键调整焦点。
  • 新增并行操作元命令\parallel,以提升执行性能。
  • 新增\set RETRY支持语句出错重试。
  • 新增PLSQL默认结束符功能,将“/”作为PLSQL语句(create or replace function/procedure)的默认结束符,增加便利性。

libpq:

DWS在开发某些功能,如客户端连接工具gsql时,对PostgreSQL libpq进行了较大修改,但并未对此接口在应用程序开发场景下的使用做验证。因此对使用此接口做应用程序开发存在的风险未知,故不推荐用户使用此套接口做应用程序开发。推荐用户使用ODBC或JDBC接口来替代。

SQL差异

表1 DWS不支持的PostgreSQL数据库语言

分类

DWS不支持

说明

数据类型

几何类型line

DWS所支持的数据类型参见数据类型。

pg_node_tree

函数

枚举支持函数:

  • enum_first(anyenum)
  • enum_last(anyenum)
  • enum_range(anyenum)
  • enum_range(anyenum, anyenum)

DWS所支持的函数参见函数和操作符。

访问权限查询函数:

  • has_sequence_privilege(user, sequence, privilege)
  • has_sequence_privilege(sequence, privilege)
系统目录信息函数:
  • pg_get_triggerdef(trigger_oid)
  • pg_get_triggerdef(trigger_oid, pretty_bool)

几何类型转换函数:

line(point, point)

pg_node_tree函数

SQL语法

CREATE TABLE子句:

INHERITS ( parent_table [, ... ] )

继承表。

CREATE TABLE的列约束:

REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ]

列约束中用REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] 为表创建外键约束。

CREATE TABLE的表约束:

EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] )

表约束中用EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] )为表创建排除约束。

CREATE/ALTER/DROP EXTENSION

扩展的加载、修改和删除。

CREATE/ALTER/DROP AGGREGATE

聚集函数的定义、修改和删除。

CREATE/ALTER/DROP OPERATOR

操作符(OPERATOR)的创建、修改和删除。

CREATE/ALTER/DROP OPERATOR CLASS

操作符类(OPERATOR CLASS)的创建、修改和删除。

CREATE/ALTER/DROP OPERATOR FAMILY

操作符族(OPERATOR FAMILY)的创建、修改和删除。

CREATE/ALTER/DROP TEXT SEARCH PARSER

文本检索解析器(TEXT SEARCH PARSER)的创建、修改和删除。

CREATE/ALTER/DROP TEXT SEARCH TEMPLATE

文本检索模板(TEXT SEARCH TEMPLATE)的创建、修改和删除。

CREATE/ALTER/DROP COLLATION

排序规则(COLLATION)的创建、修改和删除

CREATE/ALTER/DROP CONVERSION

字符集编码转换(CONVERSION)的定义、修改和删除。

CREATE/ALTER/DROP RULE

规则(RULE)的创建、修改和删除。

CREATE/ALTER/DROP LANGUAGE

过程语言(LANGUAGE)的注册、修改和删除。

CREATE/ALTER/DROP DOMAIN

域(DOMAIN)的创建、修改和删除。

CREATE/DROP CAST

类型转换(CAST)的定义和删除。

CREATE/ALTER/DROP USER MAPPING

用户映射(USER MAPPING)的定义、修改和删除。

SECURITY LABEL

定义或更改对象的安全标签。

NOTIFY

生成一个通知。

LISTEN

监听一个通知。

UNLISTEN

停止监听通知信息。

LOAD

加载或重新加载一个共享库文件。

DISCARD

释放一个数据库的会话资源(8.2.0及以上集群版本已支持DISCARD)

。

MOVE BACKWARD

反向移动游标。

COPY的COPY FROM FILE和COPY TO FILE

为了权限的隔离,DWS禁用COPY FROM FILE和COPY TO FILE。

其他

自定义C函数

DWS支持的用户自定义函数可参见《数据仓库服务开发指南》中“用户自定义函数”章节。