
# 恢复控制函数
恢复控制函数提供了当前备机状态的信息。此类函数可在恢复期间或数据库正常运行时执行。
#### pg_is_in_recovery()
描述：如果恢复仍然在进行中则返回true。
返回值类型：bool
示例：
```
SELECT pg_is_in_recovery();
 pg_is_in_recovery
-------------------
 f
(1 row)
```
#### pg_last_xlog_receive_location()
描述：获取最后接收事务日志的位置并通过流媒体复制同步到磁盘。当流复制仍在进行，事务日志将持续递增。如果恢复已完成，则这个值将保持最后接收事务记录的状态并在恢复期间同步到磁盘。如果不能用流复制，或还没有开始，该函数返回NULL。
返回值类型：text
示例：
```
SELECT pg_last_xlog_receive_location();
 pg_last_xlog_receive_location
-------------------------------
(1 row)
```
#### pg_last_xlog_replay_location()
描述：获取最后一个事务日志在恢复时重放的位置。当恢复仍在进行，事务日志将持续递增。如果已经完成恢复，则将保持在恢复期间最后接收WAL记录的值。如果未进行恢复但服务器正常启动时，则这个函数返回NULL。
返回值类型：text
示例：
```
SELECT pg_last_xlog_replay_location();
 pg_last_xlog_replay_location
------------------------------
 0/2B16530
(1 row)
```
#### pg_last_xact_replay_timestamp()
描述：获取最后一个事务在恢复时重放的时间戳。这是为在主节点上生成事务提交或终止WAL记录的时间。如果在恢复时没有事务重放，则这个函数返回NULL。否则，如果恢复仍在进行，则事务日志将持续递增。如果恢复已经完成，则将保持在恢复期间最后接收WAL记录的值。如果服务器无需恢复就已正常启动，则这个函数返回NULL。
返回值类型：timestamp with time zone
恢复控制函数控制恢复的进程。这些函数可能只在恢复时被执行。
示例：
```
SELECT pg_last_xact_replay_timestamp();
 pg_last_xact_replay_timestamp
-------------------------------
 2023-01-04 07:03:08.098024+00
(1 row)
```
#### pg_is_xlog_replay_paused()
描述：如果恢复暂停则返回true。
返回值类型：bool
#### pg_xlog_replay_pause()
描述：立即暂停恢复。
返回值类型：void
#### pg_xlog_replay_resume()
描述：如果恢复处于暂停状态，则重新启动。
当恢复暂停时，没有发生数据库更改。如果是在热备里，所有新的查询将看到一致的数据库快照，并且不会有进一步的查询冲突产生，直到恢复继续。
如果不能使用流复制，则暂停状态将无限的延续。当流复制正在进行时，将连续接收WAL记录，最终将填满可用磁盘空间，这个进度取决于暂停的持续时间，WAL生成的速度和可用的磁盘空间。
返回值类型：void
#### pg_xlog_replay_completion()
描述：显示当前DN上xlog redo的进度信息。
返回值类型：record
示例：
```
SELECT * FROM pg_xlog_replay_completion();
 replay_start | replay_current | replay_end | replay_percent
--------------+----------------+------------+----------------
 0/2ACAB80    | 0/2B16530      | 0/4F62B090 | 0%
(1 row)
```
函数返回信息如下：
表1pg_xlog_replay_completion()字段 
| 名称             | 类型      | 描述                     |
|:---|:---|:---|
| replay_start   | integer | Xlog Redo的起始LSN        |
| replay_current | integer | Xlog Redo的当前replay的LSN |
| replay_end     | integer | 最大的需要Xlog Redo的LSN     |
| replay_percent | integer | Xlog Redo的当前完成的百分比     |
   
#### pg_data_sync_from_dummy_completion()
描述：显示当前DN上Failover过程中数据页文件同步的进度信息。
返回值类型：record
示例：
```
SELECT * FROM pg_data_sync_from_dummy_completion();
 start_index | current_index | total_index | sync_percent
-------------+---------------+-------------+--------------
           0 |             0 |           0 | 100%
(1 row)
```
函数返回信息如下：
表2pg_data_sync_from_dummy_completion()字段 
| 名称            | 类型      | 描述            |
|:---|:---|:---|
| start_index   | integer | 数据页文件同步的起始编号  |
| current_index | integer | 数据页文件同步的当前编号  |
| total_index   | integer | 数据页文件同步的最大编号  |
| sync_percent  | integer | 数据页文件当前完成的百分比 |
   
#### gs_roach_stop_backup(backupid text)
描述：停止一个内部备份工具GaussRoach开启的备份，返回当前日志的插入位置。与pg_stop_backup系统函数类似，但更轻量。
返回值类型：text
#### gs_roach_enable_delay_ddl_recycle(backupid name)
描述：开启延迟DDL功能，并返回开启点的日志位置。与pg_enable_delay_ddl_recycle系统函数类似，但更轻量。且通过传入不同的backupid，可支持并发打开延迟DDL。
返回值类型：text
#### gs_roach_disable_delay_ddl_recycle(backupid text)
描述：关闭延迟DDL功能，并返回本次延迟DDL生效的日志范围，并删除该范围内被用户删除的列存表物理文件。与pg_enable_delay_ddl_recycle系统函数类似，但更轻量。且通过传入不同的backupid，可支持并发关闭延迟DDL功能。
返回值类型：record
#### gs_roach_switch_xlog(request_ckpt bool)
描述：切换当前使用的日志段文件，返回切段日志的位置。且如果request_ckpt为true，则触发一个全量检查点。
返回值类型：text
#### pg_resume_bkp_flag(backupid name)
描述：用于备份恢复获取delay xlog标志，并返回start_backup_flag boolean，to_delay boolean，ddl_delay_recycle_ptr text，rewind_time text。
返回值类型：record
#### pg_update_reloptions_in_newcluster
描述：用于V3表集群级全量恢复到新集群时，将obs-store-path-list参数指定文件中存储的路径写入pg_class表的reloptions字段中。该函数仅9.1.0及以上集群版本支持。
返回值类型：bool
