
# 与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差异
表1DWS不支持的PostgreSQL数据库语言 
| 分类    | DWS不支持                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 说明                                                                                                                                                     |
|:---|:---|:---|
| 数据类型  | 几何类型line                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | DWS所支持的数据类型参见[数据类型](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0008.html)。                                                            |
| 数据类型  | pg_node_tree                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | DWS所支持的数据类型参见[数据类型](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0008.html)。                                                            |
| 函数    | 枚举支持函数： - enum_first(anyenum)  - enum_last(anyenum)  - enum_range(anyenum)  - enum_range(anyenum, anyenum)   | DWS所支持的函数参见[函数和操作符](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0027.html)。                                                            |
| 函数    | 访问权限查询函数： - has_sequence_privilege(user, sequence, privilege)  - has_sequence_privilege(sequence, privilege)                                                                                                                                                                                                                                                                                                         | DWS所支持的函数参见[函数和操作符](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0027.html)。                                                            |
| 函数    | 系统目录信息函数： - pg_get_triggerdef(trigger_oid)  - pg_get_triggerdef(trigger_oid, pretty_bool)                                                                                                                                                                                                                                                                                                                                                                                                      | DWS所支持的函数参见[函数和操作符](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0027.html)。                                                            |
| 函数    | 几何类型转换函数： line(point, point)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | DWS所支持的函数参见[函数和操作符](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0027.html)。                                                            |
| 函数    | pg_node_tree函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | DWS所支持的函数参见[函数和操作符](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0027.html)。                                                            |
| SQL语法 | CREATE TABLE子句： INHERITS ( parent_table \[, ... \] )                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 继承表。                                                                                                                                                   |
| SQL语法 | 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 \] 为表创建外键约束。 |
| SQL语法 | CREATE TABLE的表约束： EXCLUDE \[ USING index_method \] ( exclude_element WITH operator \[, ... \] )                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 表约束中用EXCLUDE \[ USING index_method \] ( exclude_element WITH operator \[, ... \] )为表创建排除约束。                                                            |
| SQL语法 | CREATE/ALTER/DROP EXTENSION                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 扩展的加载、修改和删除。                                                                                                                                           |
| SQL语法 | CREATE/ALTER/DROP AGGREGATE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 聚集函数的定义、修改和删除。                                                                                                                                         |
| SQL语法 | CREATE/ALTER/DROP OPERATOR                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 操作符（OPERATOR）的创建、修改和删除。                                                                                                                                |
| SQL语法 | CREATE/ALTER/DROP OPERATOR CLASS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 操作符类（OPERATOR CLASS）的创建、修改和删除。                                                                                                                         |
| SQL语法 | CREATE/ALTER/DROP OPERATOR FAMILY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 操作符族（OPERATOR FAMILY）的创建、修改和删除。                                                                                                                        |
| SQL语法 | CREATE/ALTER/DROP TEXT SEARCH PARSER                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 文本检索解析器（TEXT SEARCH PARSER）的创建、修改和删除。                                                                                                                  |
| SQL语法 | CREATE/ALTER/DROP TEXT SEARCH TEMPLATE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 文本检索模板（TEXT SEARCH TEMPLATE）的创建、修改和删除。                                                                                                                 |
| SQL语法 | CREATE/ALTER/DROP COLLATION                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 排序规则（COLLATION）的创建、修改和删除。                                                                                                                              |
| SQL语法 | CREATE/ALTER/DROP CONVERSION                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 字符集编码转换（CONVERSION）的定义、修改和删除。                                                                                                                          |
| SQL语法 | CREATE/ALTER/DROP RULE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 规则（RULE）的创建、修改和删除。                                                                                                                                     |
| SQL语法 | CREATE/ALTER/DROP LANGUAGE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 过程语言（LANGUAGE）的注册、修改和删除。                                                                                                                               |
| SQL语法 | CREATE/ALTER/DROP DOMAIN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 域（DOMAIN）的创建、修改和删除。                                                                                                                                    |
| SQL语法 | CREATE/DROP CAST                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 类型转换（CAST）的定义和删除。                                                                                                                                      |
| SQL语法 | CREATE/ALTER/DROP USER MAPPING                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 用户映射（USER MAPPING）的定义、修改和删除。                                                                                                                           |
| SQL语法 | SECURITY LABEL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 定义或更改对象的安全标签。                                                                                                                                          |
| SQL语法 | NOTIFY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 生成一个通知。                                                                                                                                                |
| SQL语法 | LISTEN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 监听一个通知。                                                                                                                                                |
| SQL语法 | UNLISTEN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 停止监听通知信息。                                                                                                                                              |
| SQL语法 | LOAD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 加载或重新加载一个共享库文件。                                                                                                                                        |
| SQL语法 | MOVE BACKWARD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 反向移动游标。                                                                                                                                                |
| SQL语法 | COPY的COPY FROM FILE和COPY TO FILE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 为了权限的隔离，DWS禁用COPY FROM FILE和COPY TO FILE。                                                                                                              |
| 其他    | 自定义C函数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | DWS支持的用户自定义函数可参见[用户自定义函数](https://support.huaweicloud.com/devg-911-dws/dws_04_0507.html)章节。                                                            |
   
