
# 如何增加PostgreSQL、GaussDB数据源额外权限？
#### 问题描述
PostgreSQL、GaussDB数据源的默认权限无法正常执行实时处理集成作业。
#### 原因分析
- PostgreSQL使用pgoutput插件进行增量逻辑解码，该插件依赖PUBLICATION。
- PostgreSQL、GaussDB增量位点启动和逻辑复制槽推进都需要查询数据库wal日志信息，需要获取pg_ls_waldir()函数查询权限。
 
#### 解决方案
1. **PostgreSQL使用pgoutput插件进行增量逻辑解码，该插件依赖PUBLICATION** **。**
   
   1. 查看发布的命令。
      ```
      SELECT * FROM pg_publication;
      ```
      
   
   2. 如果名为dbz_publication的发布不存在，在启动migration作业后会自动用作业配置的账号创建publication，因此要**提前给账号授权** ，或**使用有权限的账号创建发布** 。
      授权创建发布的命令：
      ```
      GRANT CREATE ON DATABASE "your_databasename" TO "your_user";
      ```
      创建发布的命令（**如果不授权，需要手动创建发布**）：
      ```
      -- PostgreSQL版本大于等于13
      CREATE PUBLICATION dbz_publication FOR ALL TABLES WITH (publish_via_partition_root = true)
      -- PostgreSQL版本小于13
      CREATE PUBLICATION dbz_publication FOR ALL TABLES
      ```
      
   
   3. 如果名为dbz_publication的发布存在，要添加参数（PostgreSQL版本小于13可以忽略此操作）。
      ```
      ALTER PUBLICATION dbz_publication SET (publish_via_partition_root = true);
      ```
      
   
   
   
   
2. **PostgreSQL增量位点启动和逻辑复制槽推进都需要查询数据库wal日志信息，需要获取pg_ls_waldir()函数查询权限** **。**
   
   1. 确认作业配置的账号是否有执行pg_ls_waldir()函数的权限。
      ```
      SELECT has_function_privilege('your_user', 'pg_ls_waldir()', 'EXECUTE');
      SELECT pg_ls_waldir() -- 最直观判断是否能执行成功
      ```
      
   
   2. 如果没有权限，用超级用户（SUPERUSER）或具有 pg_monitor 角色权限的用户（root）授权。
      ```
      GRANT pg_monitor TO your_user;      -- 授权
      REVOKE pg_monitor from your_user;   -- 撤权
      ```
      
   
   3. 重新用作业配置的账号登录到数据库重复步骤[1]操作确认权限是否生效。
   
   
   
   
3. **GaussDB增量位点启动和逻辑复制槽推进都需要查询数据库wal日志信息，需要获取pg_ls_waldir()函数查询权限** **。**
   
   1. 确认作业配置的账号是否有执行pg_ls_waldir()函数的权限。
      ```
      SELECT pg_ls_waldir() -- 如果没权限，会报错：“only system/monitor admin can check WAL directory!”
      ```
      
   
   2. 如果没有权限，用超级用户（SUPERUSER）或具有 monitor 角色权限的用户（root）授权。
      ```
      ALTER USER your_user MONADMIN    -- 授权
      ALTER USER your_user NOMONADMIN  -- 撤权
      ```
      
   
   3. 重新用作业配置的账号登录到数据库重复步骤[1]操作确认权限是否生效。
   
   
   
   
 
