
# 恢复控制函数
恢复信息函数提供了当前备机状态的信息。这些函数可能在恢复期间或正常运行中执行。
#### pg_is_in_recovery()
描述：如果恢复仍然在进行中则返回true。
返回值类型：Boolean
#### pg_last_xlog_receive_location()
描述：获取最后接收事务日志的位置并通过流复制将其同步到磁盘。当流复制正在进行时，事务日志将持续递增。如果恢复已完成，则最后一次获取的WAL记录会被静态保持并在恢复过程中同步到磁盘。如果流复制不可用，或还没有开始，这个函数返回NULL。
返回值类型：text
#### pg_last_xlog_replay_location()
描述：获取最后一个事务日志在恢复时重放的位置。如果恢复仍在进行，事务日志将持续递增。如果已经完成恢复，则将保持在恢复期间最后接收WAL记录的值。如果未进行恢复但服务器正常启动时，则这个函数返回NULL。
返回值类型：text
#### pg_last_xact_replay_timestamp()
描述：获取最后一个事务在恢复时重放的时间戳。这是为在主节点上生成事务提交或终止WAL记录的时间。如果在恢复时没有事务重放，则这个函数返回NULL。如果恢复仍在进行，则事务日志将持续递增。如果恢复已经完成，则将保持在恢复期间最后接收WAL记录的值。如果服务器无需恢复就已正常启动，则这个函数返回NULL。
返回值类型：timestamp with time zone
恢复控制函数控制恢复的线程。这些函数可能只在恢复时被执行。
#### pg_is_xlog_replay_paused()
描述：如果恢复暂停则返回true。
返回值类型：Boolean
#### pg_xlog_replay_pause()
描述：立即暂停恢复。
返回值类型：void
#### pg_xlog_replay_resume()
描述：如果恢复处于暂停状态，则重新启动。
返回值类型：void
#### gs_get_active_archiving_standby()
描述：查询同一分片内归档备机的信息。返回备机名，备机归档位置和已归档日志个数。
返回值类型：text，int
#### gs_pitr_get_warning_for_xlog_force_recycle()
描述：查询开启归档后是否因归档槽不推进日志大量堆积导致日志被回收。
返回值类型：Boolean
#### gs_pitr_clean_history_global_barriers(stop_barrier_timestamp cstring)
描述：清理指定时间之前所有barrier记录。返回时间最远的barrier记录。入参为cstring类型，linux时间戳。需要管理员角色或运维管理员角色执行。
返回值类型：text
#### gs_pitr_archive_slot_force_advance(stop_barrier_timestamp cstring)
描述：强制推进归档槽，并清理不需要的barrier记录。返回新的归档槽位置。入参为cstring类型，linux时间戳。需要管理员角色或运维管理员角色执行。
返回值类型：text
#### gs_recent_barrier_buffer_info(start_time text, end_time text)
描述：根据用户输入的时间范围，进行相应的barrier信息查询，获取time_stamp、CSN、LSN和standard_time。
返回值类型：records
说明：调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限。输入参数start_time和end_time采用"年-月-日 时间"格式，其中时间采用clock格式。查询最大时间跨度为1天，超出跨度约束，根据查询起始时间将结束时间自动转换为极限边界进行查询。例如：
```
gaussdb=# SELECT * FROM gs_recent_barrier_buffer_info('2024-01-15 23:27:50', '2024-01-15 23:28:00');
 timestamp  |        lsn        |   csn    |    standard_time    
------------+-------------------+----------+---------------------
 1705332470 | 00000000/15FFBBA0 | 41020421 | 2024-01-15 23:27:50
 1705332471 | 00000000/15FFBDF0 | 41020422 | 2024-01-15 23:27:51
 1705332472 | 00000000/15FFC058 | 41020423 | 2024-01-15 23:27:52
 1705332472 | 00000000/15FFC0F8 | 41020424 | 2024-01-15 23:27:52
 1705332473 | 00000000/15FFC348 | 41020425 | 2024-01-15 23:27:53
 1705332474 | 00000000/15FFC598 | 41020426 | 2024-01-15 23:27:54
 1705332475 | 00000000/15FFC638 | 41020427 | 2024-01-15 23:27:55
 1705332476 | 00000000/15FFC888 | 41020428 | 2024-01-15 23:27:56
 1705332476 | 00000000/15FFDC80 | 41020433 | 2024-01-15 23:27:56
 1705332477 | 00000000/15FFDD20 | 41020434 | 2024-01-15 23:27:57
 1705332478 | 00000000/15FFDF70 | 41020435 | 2024-01-15 23:27:58
 1705332479 | 00000000/15FFE1D8 | 41020436 | 2024-01-15 23:27:59
 1705332480 | 00000000/15FFE278 | 41020437 | 2024-01-15 23:28:00
 1705332480 | 00000000/15FFE4C8 | 41020438 | 2024-01-15 23:28:00
(14 rows)
```
#### gs_show_obs_media_files(slot_name cstring, src cstring, offset int32, limit int32)
描述：根据用户输入的归档槽（slot_name）和OBS目录地址（src），查询OBS文件列表。
返回值类型：records
说明：调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限。Offset为查询结果偏移，limit为输出最大行数，查询src下所有文件。例如：
```
gaussdb=# SELECT gs_show_obs_media_files('ssh','cn_5001/pg_xlog',1, 5);
                                    gs_show_obs_media_files                                    
-------------------------------------------------------------------------------------------------
 (wstdist_ssh/archive/cn_5001/pg_xlog/000000010000000000000010_01_01_00000000_00000000_00000003)
 (wstdist_ssh/archive/cn_5001/pg_xlog/000000010000000000000010_02_01_00000000_00000000_00000003)
 (wstdist_ssh/archive/cn_5001/pg_xlog/000000010000000000000010_03_01_00000000_00000000_00000003)
 (wstdist_ssh/archive/cn_5001/pg_xlog/000000010000000000000011_00_01_00000000_00000000_00000003)
 (wstdist_ssh/archive/cn_5001/pg_xlog/000000010000000000000011_01_01_00000000_00000000_00000003)
(5 rows)
```
#### gs_upload_obs_media_file(slot_name cstring, src cstring, dest cstring, is_forced bool)
描述：根据用户输入的归档槽（slot_name）、上传文件原地址（src）、OBS地址（dest）和是否强制上传（is_forced），上传OBS文件。
返回值类型：void
说明：调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限。原文件目录仅允许为$GAUSSLOG目录。例如：
```
gaussdb=# SELECT * FROM gs_upload_obs_media_file('ssh', '/data/gauss/log/stwang/test/000000010000000000000019_02_01_00000000_00000000_00000003', 'cn_5001/pg_xlog/000000010000000000000019_02_01_00000000_00000000_00000003', true);
 gs_upload_obs_media_file
----------------------------
(1 row)
```
#### gs_download_obs_media_file(slot_name cstring, src cstring, dest cstring)
描述：根据用户输入的归档槽（slot_name）、下载原地址（src）和本地目标地址（dest），下载OBS文件。
返回值类型：void
说明：调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限。下载目录仅允许为$GAUSSLOG目录。例如：
```
gaussdb=# SELECT * FROM gs_download_obs_media_file('ssh','cn_5001/pg_xlog/000000010000000000000019_02_01_00000000_00000000_00000003','/data/gauss/log/stwang/test');
 gs_download_obs_media_file
------------------------------
(1 row)
```
当恢复暂停时，没有发生数据库更改。如果是在热备里，所有新的查询将看到一致的数据库快照，并且不会有进一步的查询冲突产生，直到恢复继续。
如果不能使用流复制，则暂停状态将无限的延续。当流复制正在进行时，将连续接收WAL记录，最终将填满可用磁盘空间，这个进度取决于暂停的持续时间，WAL生成的速度和可用的磁盘空间。
