# GaussDB PG兼容模式
#### **兼容模式设置**
1. 源库为PostgreSQL时，支持往GaussDB的PG兼容模式迁移。
2. 创建PG兼容模式的数据库。

1. 使用具有创建数据库权限的用户登录GaussDB数据库。
2. 执行以下命令，创建PG兼容模式的GaussDB数据库。 
   **create database** ***databasename*** **dbcompatibility = 'PG';**
   
   
3. 执行以下命令，若datcompatibility兼容性一列为PG，则创建成功。 
   **select \* from pg_database where datname = '** ***databasename*** **';**
   
   
 
#### **GUC参数设置**
当使用PG兼容模式时，可以设置GUC参数提高GaussDB的兼容性，迁移涉及的GUC参数和影响范围可参见[表1]。
![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/caution_3.0-zh-cn.png)
GaussDB数据库提供了许多运行参数，配置这些参数可以影响数据库系统的行为。在修改这些参数时请确保用户理解了这些参数对数据库的影响，否则可能会导致无法预料的结果。
 表1GaussDB（PG兼容模式）的GUC参数 
| 兼容PG行为配置项                                                                                                                                                                                                                          | 兼容性配置项                          | 兼容性配置项名字                                                               | 支持的数据库     | 是否建议打开 |
|:---|:---|:---|:---|:---|
| behavior_compat_options                              | display_leading_zero         | 浮点数显示配置项-小数点前0显示。                                                    | 集中式版/分布式版   | 是      |
| behavior_compat_options                              | bind_procedure_searchpath    | 未指定模式名的存储过程中的数据库对象的搜索路径配置项。                                            | 集中式版/分布式版  | 是      |
| behavior_compat_options                              | correct_to_number              | 控制to_number()结果兼容性的配置项。                                                | 集中式版/分布式版   | 是      |
| behavior_compat_options                              | return_null_string            | 控制函数lpad()和rpad()结果为空字符串''的显示配置项。                                | 集中式版/分布式版 | 是    |
| behavior_compat_options                              | allow_procedure_compile_check | 控制存储过程中select语句和open cursor语句的编译检查。                                     | 集中式版/分布式版  | 是      |
| plsql_compile_check_options                                                                                                                                                                                                        | plsql_expression_check      | GaussDB的PL/SQL编译检查开关，设置为plsql_expression_check后，创建函数/存储过程/包时会检查能否正常编译。 | 集中式版        | 是     |
   
#### 操作步骤
**集中式版**
1. 连接GaussDB数据库，切换至GaussDB的安装用户。 
   **su - omm**
   ![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/note_3.0-zh-cn.png)
   "omm"为示例用户，切换时以实际安装用户为准。
   
   
2. 执行以下命令，设置参数。 
   **gs_guc reload -Z coordinator -Z datanode -N all -I all -c "behavior_compat_options='display_leading_zero,bind_procedure_searchpath,correct_to_number,return_null_string,allow_procedure_compile_check'";**
   **gs_guc reload -Z coordinator -Z datanode -N all -I all -c "plsql_compile_check_options='plsql_expression_check'";**
   ![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/caution_3.0-zh-cn.png)
   - 以上GUC参数设置均以 PostgreSQL 为源、GaussDB 集中式版 V2.0 - 8.200 企业版为目标库，其他链路的 GUC 参数，请参考预检查功能中提示的参数名称和参数值，分别替换掉上述命令中等号前后的内容。
   
   - GUC 参数 plsql_compile_check_options 的值 plsql_expression_check 结构迁移全部完成后，需要设置为空。
   
   
   gs_guc reload -Z coordinator -Z datanode -N all -I all -c "plsql_compile_check_options=''";
   
   
**分布式版**
1. 连接GaussDB数据库，切换至GaussDB的安装用户。 
   **su - omm**
   ![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/note_3.0-zh-cn.png)
   "omm"为示例用户，切换时以实际安装用户为准。
   
   
2. 执行以下命令设置参数。 
   **gs_guc reload -Z coordinator -Z datanode -N all -I all -c "behavior_compat_options='display_leading_zero,bind_procedure_searchpath,correct_to_number,return_null_string,allow_procedure_compile_check'";**
   ![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/caution_3.0-zh-cn.png)
   以上GUC参数设置均以 PostgreSQL 为源、GaussDB 分布式版 V2.0 - 8.200 企业版为目标库，其他链路的 GUC 参数，请参考预检查功能中提示的参数名称和参数值，分别替换掉上述命令中等号前后的内容。
   
   
 
