# bucket系统函数
- gs_bucket_get_data_distribution(relation REGCLASS, forknum INTEGER, including_toast Boolean) 描述：获取某个hashbucket表的数据分布情况。
  参数说明：
  
  | 名称              | 类型      | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
  |:---|:---|:---|
  | relation         | REGCLASS | 表名。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
  | forknum           | INTEGER  | 数据文件分支，合法取值范围包括： - 0：表示main fork。  - 1：表示fsm fork。  - 2：表示vm fork。  - -1：表示其他所有forknum下的结果之和。   |
  | including_toast | Boolean   | 数据分布情况统计是否包含toast表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
     
  返回值说明：
  
  | 名称                 | 类型  | 描述                     |
  |:---|:---|:---|
  | node_name         | TEXT | 数据库节点名称。                 |
  | bucketnode         | INT2  | bucket编号。              |
  | used_blocks     | INT8   | 表在该bucket编号下已使用的数据块数量。  |
  | allocated_blocks | INT8 | 表在该bucket编号下已申请的数据块数量。 |
     
  示例：
  ```
  gaussdb=# select * from gs_bucket_get_data_distribution('bucket_table', 0, true);
   node_name | bucketnode | used_blocks | allocated_blocks 
  -----------+------------+-------------+------------------
   datanode1 |          0 | 1           | 8
   datanode1 |          1 | 1           | 8
   datanode1 |          2 | 1           | 8
   datanode1 |          3 | 1           | 8
   datanode1 |          4 | 1           | 8
   datanode1 |          5 | 1           | 8
   datanode1 |          6 | 1           | 8
   datanode1 |          7 | 1           | 8
   datanode1 |          8 | 1           | 8
   datanode1 |          9 | 1           | 8
   datanode1 |         10 | 1           | 8
   datanode1 |         11 | 1           | 8
   datanode1 |         12 | 1           | 8
   datanode1 |         13 | 1           | 8
   datanode1 |         14 | 1           | 8
   datanode1 |         15 | 1           | 8
   datanode1 |         16 | 1           | 8
   datanode1 |         17 | 1           | 8
   datanode1 |         18 | 1           | 8
   datanode1 |         19 | 1           | 8
   datanode1 |         20 | 1           | 8
   datanode1 |         21 | 1           | 8
   datanode1 |         22 | 1           | 8
   datanode1 |         23 | 1           | 8
   datanode1 |         24 | 1           | 8
  ...(数据较多，仅展示部分)
  ```
  

- gs_redis_get_plan(origin_group_id OID, target_group_id OID) 描述：获取完整的迁移计划。只支持在扩容期间内部调用，且只支持在CN上调用。
  参数说明：
  
  | 名称             | 类型     | 描述               |
  |:---|:---|:---|
  | origin_group_id | OID | 源节点的node group。 |
  | target_group_id  | OID   | 新节点的node group。  |
     
  返回值说明：
  
  | 名称               | 类型                | 描述                      |
  |:---|:---|:---|
  | sender_id      | OID              | 源节点的node oid。           |
  | sender_name  | CSTRING          | 源节点的节点名称。               |
  | receiver_id    | OID                | 新节点的node oid。           |
  | receiver_name | CSTRING          | 新节点的节点名称。                |
  | bucket_number  | INT4              | bucket_list中包含的bucket个数。 |
  | bucket_list        | OIDVECTOR_EXTEND | 迁移计划涉及的bucket列表。       |
     
  

- gs_redis_get_bucket_statistics() 描述：获取日志流传输状态。只支持在扩容期间内部调用。
  参数：void
  返回值说明：
  
  | 名称                      | 类型        | 描述                                                                                         |
  |:---|:---|:---|
  | bucket_id               | OID    | bucket id                                                                                  |
  | redis_state           | INT1   | bucket的扩容状态，0表示扩容未开始，1表示扩容基线数据已完成。                                                       |
  | xlog_count              | INT8 | bucket在当前database扩容开始后（即上次调用gs_redis_set_distributed_db后）在原DN产生的Xlog数量。                  |
  | sndr_latest_lsn         | INT8   | bucket在当前database扩容开始后（即上次调用gs_redis_set_distributed_db后）在原DN产生的最新LSN。                    |
  | parser_latest_lsn       | INT8  | bucket在当前database扩容开始后（即上次调用gs_redis_set_distributed_db后）被原DN的扩容相关线程解析到的最新LSN。           |
  | parser_latest_lsn_new  | INT8   | bucket在当前database扩容开始后（即上次调用gs_redis_set_distributed_db后）被原DN的扩容相关线程解析到bucketxlog的最新LSN。    |
  | rcvr_redo_latest_lsn     | INT8  | bucket在当前database扩容开始后（即上次调用gs_redis_set_distributed_db后）被新DN的扩容相关线程回放到的最新LSN。            |
  | rcvr_redo_latest_lsn_new | INT8 | bucket在当前database扩容开始后（即上次调用gs_redis_set_distributed_db后）被新DN的扩容相关线程回放到bucketxlog的最新LSN。 |
  | rcvr_checkpoint         | INT8   | bucket在当前database扩容开始后（即上次调用gs_redis_set_distributed_db后）的checkpoint点。                   |
  | rcvr_redo_start_lsn     | INT8    | bucket在当前database扩容开始后（即上次调用gs_redis_set_distributed_db后）回放开始的原始LSN。                       |
  | rcvr_redo_end_lsn       | INT8  | bucket在当前database扩容开始后（即上次调用gs_redis_set_distributed_db后）回放结束的原始LSN。                     |
     
  

- gs_redis_set_distributed_db(db_name CSTRING, bucketgroup SMALLINT) 描述：设置当前正在hashbucket重分布的数据库。只支持在扩容期间内部调用，且只支持在DN上调用。
  参数说明：
  - db_name：本次要重分布的数据库库名。
  
  - bucketgroup：本次要重分布的bucketgroup，当前版本暂无任何作用。
  
  
  返回值说明：void
  
- gs_redis_parse_slicebucket_tranfer_file(plan_json CSTRING, type CSTRING)
  描述：用于获取slicebucket搬迁计划。只支持在扩容期间内部调用，且只支持在CN上调用，当前版本暂不支持。
  参数说明：
  
  | 名称        | 类型      | 描述                                         |
  |:---|:---|:---|
  | plan_json | TEXT   | 用户指定的slice搬迁文件。                              |
  | type     | CSTRING | 解析计划类型，可指定为'incremental'或'full'，默认为'full'。 |
     
  返回值类型：
  
  | 名称               | 类型      | 描述              |
  |:---|:---|:---|
  | idx          | INT   | 需要搬迁的数据库序号。 |
  | database_name | CSTRING | 需要搬迁的数据库名字。   |
     
  
- gs_redis_get_slicebucket_plan()
  描述：用于获取当前库的slicebucket迁移计划。只支持在扩容期间内部调用，且只支持在CN上调用，当前版本暂不支持。
  参数：void
  返回值说明：
  
  | 名称            | 类型               | 描述                                       |
  |:---|:---|:---|
  | sender_id     | OID              | 源节点的节点oid。                             |
  | sender_name   | CSTRING           | 源节点的节点名称。                                |
  | receiver_id   | OID              | 新节点的节点oid。                               |
  | receiver_name | CSTRING           | 新节点的节点名称。                                 |
  | bucket_number  | INT4            | bucket_list中包含的bucket个数。                  |
  | bucket_list  | OIDVECTOR_EXTEND | 迁移计划涉及的bucket列表。                          |
  | bucketgroup     | OID             | bucketlist中的bucket所属的具体group，取值范围为0 \~ 4。 |
     
  
- gs_redis_hashbucket_update_segment_header(origin_group_id OID, target_group_id OID) 描述：更新当前数据库所有hashbucket表的header。只支持在扩容期间内部调用，且只支持在CN上调用。
  参数说明：
  
  | 名称            | 类型   | 描述             |
  |:---|:---|:---|
  | origin_group_id | OID | 源节点的node group。 |
  | target_group_id   | OID    | 新节点的node group。 |
     
  返回值类型：Boolean
  
- gs_redis_local_get_segment_header(table_name REGCLASS, bucketlist OIDVECTOR_EXTEND) 描述：获取段页式表header。只支持在DN上调用。
  参数说明：
  
  | 名称         | 类型              | 描述       |
  |:---|:---|:---|
  | table_name | REGCLASS         | 表名      |
  | bucketlist | OIDVECTOR_EXTEND | bucket列表。 |
     
  返回值类型：header_info
  示例：
  ```
  gaussdb=#  SELECT * FROM gs_redis_local_get_segment_header('mytable', '256');
   gs_redis_local_get_segment_header
  ----------------------------------------------------------------------------------------------------------------------------
  4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,...(数据较多，仅展示部分) 
  (1 row)
  ```
  
- gs_redis_local_update_segment_header(table_name REGCLASS, header_info CSTRING) 描述：更新段页式表header。只支持在DN上调用。
  参数说明：
  
  | 名称          | 类型       | 描述          |
  |:---|:---|:---|
  | table_name | REGCLASS | 表名          |
  | header_info  | CSTRING | 段页式表header。 |
     
  返回值类型：void
  示例：
  ```
  gaussdb=#  SELECT * FROM gs_redis_local_update_segment_header('mytable', '4294967295,4294967295,4294967295,4294967295,....'); (数据较多，仅展示部分)
   gs_redis_local_update_segment_header
  -------------------------------------------
   0 
  (1 row)
  ```
  
- gs_redis_hashbucket_update_inverse_pointer(buckets TEXT, origin_dn_name TEXT, new_dn_name TEXT) 描述：更新当前db所有hashbucket表本批次bucket的反向指针。只支持在扩容期间内部调用，且只支持在CN上调用。
  参数说明：
  
  | 名称             | 类型     | 描述            |
  |:---|:---|:---|
  | buckets       | TEXT  | 本次上线的bucket列表。 |
  | origin_dn_name  | TEXT | 源节点名称。        |
  | new_dn_name | TEXT  | 新节点名称。         |
     
  返回值类型：void
  
- gs_redis_local_get_inverse_pointer(buckets TEXT, origin_dn_name TEXT, new_dn_name TEXT) 描述：获取反向指针。只支持在扩容期间内部调用，且只支持在DN上调用。
  参数说明：
  
  | 名称              | 类型    | 描述           |
  |:---|:---|:---|
  | buckets        | TEXT  | 本次上线的bucket列表。 |
  | origin_dn_name | TEXT   | 源节点名称。          |
  | new_dn_name     | TEXT | 新节点名称。       |
     
  返回值类型：void
  
- gs_redis_local_update_inverse_pointer(table_name TEXT, header_info TEXT, bucketlist TEXT) 描述：记录更新反向指针的Xlog。只支持在扩容期间内部调用，且只支持在DN上调用。
  参数说明：
  
  | 名称          | 类型     | 描述           |
  |:---|:---|:---|
  | table_name | REGCLASS | 表名。           |
  | header_info  | TEXT   | 段页式表header。 |
  | bucketlist | TEXT   | bucket列表。  |
     
  返回值类型：void
  
- gs_redis_local_set_hashbucket_frozenxid 描述：修改hashbucket表在系统表中的relfrozenxid64值。只支持在扩容期间内部调用，且只支持在DN上调用。
  参数说明：void
  返回值类型：void
  

- gs_redis_set_hashbucket_frozenxid(origin_group_id OID, target_group_id OID) 描述：修改新DN节点hashbucket表在系统表中的relfrozenxid64值。只支持在扩容期间内部调用，且只支持在CN上调用。
  参数说明：
  
  | 名称             | 类型   | 描述            |
  |:---|:---|:---|
  | origin_group_id  | OID | 源节点的node group。  |
  | target_group_id | OID | 新节点的node group。 |
     
  返回值类型：void
  
- gs_redis_set_nextxid(xid BIGINT) 描述：修改DN节点next_xid值。只支持在扩容期间内部调用，且只支持在DN上调用。
  参数说明：xid：预期next_xid的值
  返回值类型：void
  

- gs_redis_set_csn(csn BIGINT)
  描述：修改DN节点next_csn值。只支持在扩容期间内部调用，且只支持在GTM_FREE模式下和DN上调用。
  参数说明：
  - csn：预期next_csn的值。
  
  
  返回值类型：void
  

- gs_redis_check_bucket_flush(dn_array NAME\[\])
  描述：查询RTO回放私有buffer是否全部刷下去。只支持在扩容期间内部调用。
  参数说明：
  - dn_array：DN节点名称列表。
  
  
  返回值类型：Boolean
  

- gs_redis_get_flush_page_lsn(isclean bool) 描述：查询bucket扩容回放的刷页信息。
  权限：只支持debug版本调用，只支持在扩容期间内部调用。
  参数说明：
  - isclean：BOOLEAN类型，是否清理刷页信息。
  
  
  返回值说明：
  
  | 名称                | 类型       | 描述                     |
  |:---|:---|:---|
  | node_name         | TEXT    | 页面所在dn名。              |
  | space_id          | OID     | 表空间id。                 |
  | db_id             | OID     | 数据库id。                 |
  | file_id         | OID   | 数据文件编号，取值范围1-5。        |
  | bucket_id         | OID     | bucket分区id，取值范围0-1023。 |
  | forknum         | OID       | 数据文件分支，取值范围0-2。        |
  | blocknum         | OID   | 物理页面在数据文件中的偏移页面号。     |
  | latest_flush_lsn | UINT8 | 刷脏页面最新的lsn。             |
     
  
- gs_redis_show_bucketxid(bucketid_list OIDVECTOR_EXTEND)
  描述：查询指定bucket对应的bucketxid。只支持在扩容期间内部调用，且只支持在DN上调用。
  参数说明：
  - bucketid_list：bucket列表。
  
  
  返回值类型：CSTRING
  

- gs_redis_drop_bucket_files(plan_json CSTRING)
  描述：删除源节点已经物理搬迁的rangebucket文件。只支持在扩容期间内部调用，且只支持在CN上调用，当前版本暂不支持。
  参数说明：
  
  | 名称         | 类型        | 描述            |
  |:---|:---|:---|
  | plan_json | CSTRING | 用户指定的SLICE搬迁文件。 |
     
  返回值类型：BOOLEAN
  
- gs_redis_drop_bucket_files(origin_group_id OID, target_group_id OID)
  描述：删除源节点已经物理搬迁的文件。只支持在扩容期间内部调用，且只支持在CN上调用。
  参数说明：
  
  | 名称              | 类型   | 描述               |
  |:---|:---|:---|
  | origin_group_id  | OID | 源节点的node group。 |
  | target_group_id | OID  | 新节点的node group。 |
     
  返回值类型：BOOLEAN
  

- gs_redis_local_drop_bucket_files(bucketlist CSTRING, bucketnum SMALLINT)
  描述：删除对应的bucket list。只支持在扩容期间内部调用，且只支持在DN上调用。
  参数说明：
  
  | 名称            | 类型        | 描述          |
  |:---|:---|:---|
  | bucketlist | CSTRING   | 指定bucket列表。 |
  | bucketnum  | SMALLINT | bucket的个数。   |
     
  返回值类型：Boolean
  
- gs_redis_local_drop_bucket_files(database_name NAME, bucketlist CSTRING, bucketnum SMALLINT) 描述：用于rangebucket表删除对应db的bucket list。只支持在扩容期间内部调用，且只支持在DN上调用，当前版本暂不支持。
  参数说明：
  
  | 名称              | 类型    | 描述          |
  |:---|:---|:---|
  | database_name | NAME    | 指定数据库名。        |
  | bucketlist      | CSTRING | 指定bucket列表。 |
  | bucketnum   | SMALLINT | bucket的个数。  |
     
  返回值类型：Boolean
  
- gs_redis_slicebucket_update_segment_header() 描述：更新当前数据库所有slicebucket表的header。只支持在扩容期间内部调用，且只支持在CN上调用，当前版本暂不支持。
  入参：void
  返回值类型：Boolean
  
- gs_redis_get_undo_state(mode INTEGER) 描述：获取扩容重分布期间的UNDO回滚状态。仅支持在扩容期间内部调用。
  参数说明：
  
  | 名称   | 类型        | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
  |:---|:---|:---|
  | mode | INTEGER | 重分布期间判断UNDO回滚状态的模式，取值范围： - 0：表示UNDO监控点next_xid前是否有待回滚的事务。  - 1：表示是否有新增的小于监测点next_xid的回滚事务。  - 2：表示是否有大于监测点next_xid的待回滚事务。   |
     
  返回值state为INT4类型，表示查询到的扩容重分布期间的UNDO回滚状态。根据参数值不同的返回值含义如下：
  - 当mode=0时：
    - state = 0表示无待回滚事务，xmin \> 监控点next_xid。
    
    - state = 1表示无待回滚事务，xmin \<= 监控点next_xid。
    
    - state = 2表示有待回滚事务。
     
  
  - 当mode=1时：
    - state=0表示无监控点next_xid之前的新增回滚事务。
    
    - state=1表示有监控点next_xid之前的新增回滚事务。
     
  
  - 当mode=2时：
    - state=0表示无监控点next_xid之后的待回滚事务。
    
    - state=1表示有监控点next_xid之后的待回滚事务。
     
   
 
