
# 备份控制函数
备份控制函数可帮助进行在线备份。
#### pg_create_restore_point(name text)
描述：为执行恢复创建一个命名点。（需要管理员角色）
返回值类型：text
备注：pg_create_restore_point创建了一个可以用作恢复目的、有命名的事务日志记录，并返回相应的事务日志位置。在恢复过程中，recovery_target_name可以通过这个名称定位对应的日志恢复点，并从此处开始执行恢复操作。避免使用相同的名称创建多个恢复点，因为恢复操作将在第一个匹配（恢复目标）的名称上停止。
#### pg_current_xlog_location()
描述：获取当前事务日志的写入位置。
返回值类型：text
备注：pg_current_xlog_location使用与前面那些函数相同的格式显示当前事务日志的写入位置。如果是只读操作，不需要系统管理员权限。
示例：
```
SELECT pg_current_xlog_location();
 pg_current_xlog_location
--------------------------
 0/4310D5D8
(1 row)
```
#### pg_current_xlog_insert_location()
描述：获取当前事务日志的插入位置。
返回值类型：text
备注：pg_current_xlog_insert_location显示当前事务日志的插入位置。插入点是事务日志在某个瞬间的"逻辑终点"，而实际的写入位置则是从服务器内部缓冲区写出时的终点。写入位置是可以从服务器外部检测到的终点，如果要归档部分完成事务日志文件，则该操作即可实现。插入点主要用于服务器调试目的。如果是只读操作，不需要系统管理员权限。
示例：
```
SELECT pg_current_xlog_insert_location();
 pg_current_xlog_insert_location
---------------------------------
 0/4316AD50
(1 row)
```
#### pg_start_backup(label text \[, fast boolean \])
描述：开始执行在线备份。（需要管理员角色或复制的角色）
返回值类型：text
备注：pg_start_backup接受一个用户定义的备份标签（通常这是备份转储文件存放地点的名字）。这个函数向数据库集群的数据目录写入一个备份标签文件，然后以文本方式返回备份的事务日志起始位置。
```
SELECT pg_start_backup('label_goes_here');
 pg_start_backup
-----------------
 0/3000020
(1 row)
```
#### pg_stop_backup()
描述：完成执行在线备份。（需要管理员角色或复制的角色）
返回值类型：text
备注：pg_stop_backup删除pg_start_backup创建的标签文件，并且在事务日志归档区里创建一个备份历史文件。这个历史文件包含给予pg_start_backup的标签、备份的事务日志起始与终止位置、备份的起始和终止时间。返回值是备份的事务日志终止位置。计算出中止位置后，当前事务日志的插入点将自动前进到下一个事务日志文件，这样，结束的事务日志文件可以被立即归档从而完成备份。
示例：
```
SELECT pg_stop_backup();
 pg_stop_backup
----------------
 0/4401E610
(1 row)
```
#### pg_switch_xlog()
描述：切换到一个新的事务日志文件。（需要管理员角色）
返回值类型：text
备注：pg_switch_xlog移动到下一个事务日志文件，以允许将当前日志文件归档（假定使用连续归档）。返回值是刚完成的事务日志文件的事务日志结束位置+1。如果从最后一次事务日志切换以来没有活动的事务日志，则pg_switch_xlog什么事也不做，直接返回当前事务日志文件的开始位置。
示例:
```
SELECT pg_switch_xlog();
 pg_switch_xlog
----------------
 0/45017978
(1 row)
```
#### pg_xlogfile_name(location text)
描述：将事务日志的位置字符串转换为文件名。
返回值类型：text
备注：pg_xlogfile_name仅抽取事务日志文件名称。如果给定的事务日志位置恰好位于事务日志文件的交界上，这两个函数都返回前一个事务日志文件的名字。这对于管理事务日志归档来说是非常有利的，因为前一个文件是当前最后一个需要归档的文件。
#### pg_xlogfile_name_offset(location text)
描述：将事务日志的位置字符串转换为文件名并返回在文件中的字节偏移量。
返回值类型：text,integer
备注：可以使用pg_xlogfile_name_offset从前述函数的返回结果中抽取相应的事务日志文件名称和字节偏移量。例如：
```
SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());
NOTICE:  pg_stop_backup cleanup done, waiting for required WAL segments to be archived
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived
        file_name         | file_offset 
--------------------------+-------------
000000010000000000000003  |         272
(1 row)
```
#### pg_xlog_location_diff(location text, location text)
描述：计算两个事务日志位置之间在字节上的区别。
返回值类型：numeric
pg_cbm_tracked_location()
描述：用于查询cbm解析到的lsn位置。
返回值类型：text
#### pg_cbm_get_merged_file(startLSNArg text, endLSNArg text)
描述：用于将指定lsn范围之内的cbm文件合并成一个cbm文件，并返回合并完的cbm文件名。
返回值类型：text
#### pg_cbm_get_changed_block(startLSNArg text, endLSNArg text)
描述：用于将指定lsn范围之内的cbm文件合并成一个表，并返回表的各行记录。
返回值类型：record
备注：pg_cbm_get_changed_block返回的表字段包含：合并起始的lsn，合并截止的lsn， 表空间oid，库oid，表的relfilenode，表的fork number，表是否被删除，表是否被创建，表是否被截断，表被截断后的页面数，有多少页被修改以及被修改的页号的列表。
#### pg_cbm_recycle_file(slotName name, targetLSNArg text)
描述：删除不再使用的cbm文件，并返回删除后的第一条lsn。其中，slotName为空字符串时，将直接使用targetLSNArg作为回收点；在备份和容灾时，因为并行因素，需要指定相应的slotName，首先记录该任务的targetLSNArg到该slot中，然后遍历所有的backup slots，找到最小的lsn作为回收点。
返回值类型：text
#### pg_cbm_force_track(targetLSNArg text,timeOut int)
描述：强制执行一次cbm追踪到指定的xlog位置，并返回实际追踪结束点的xlog位置。
返回值类型：text
#### pg_enable_delay_ddl_recycle()
描述：开启延迟DDL功能，并返回开启点的xlog位置。
返回值类型：text
示例：
```
SELECT pg_enable_delay_ddl_recycle();
 pg_enable_delay_ddl_recycle
-----------------------------
 00000000/4607B250
(1 row)
```
#### pg_disable_delay_ddl_recycle(barrierLSNArg text, isForce bool)
描述：关闭延迟DDL功能，并返回本次延迟DDL生效的xlog范围。
返回值类型：record
#### pg_enable_delay_xlog_recycle()
描述：开启延迟xlog回收功能。
返回值类型：void
示例：
```
SELECT pg_enable_delay_xlog_recycle();
 pg_enable_delay_xlog_recycle
------------------------------
(1 row)
```
#### pg_disable_delay_xlog_recycle()
描述：关闭延迟xlog回收功能。
返回值类型：void
示例：
```
SELECT pg_disable_delay_xlog_recycle();
 pg_disable_delay_xlog_recycle
-------------------------------
(1 row)
```
#### pgxc_get_senders_catchup_time()
描述：显示所有DN上当前活跃的主备发送线程的追赶信息。
返回值类型：record
函数返回信息如下：
表1pgxc_get_senders_catchup_time()字段 
| 名称                     | 类型                       | 描述                     |
|:---|:---|:---|
| node_name              | text                     | 节点名称。                  |
| lwpid                  | integer                  | 当前sender的lwpid。        |
| local_role             | text                     | 本地的角色。                 |
| peer_role              | text                     | 对端的角色。                 |
| state                  | text                     | 当前sender的复制状态。         |
| sender                 | text                     | 当前sender的类型。           |
| catchup_start          | timestamp with time zone | catchup启动的时间。          |
| catchup_end            | timestamp with time zone | catchup结束的时间。          |
| catchup_type           | text                     | catchup方式为全量还是增量。      |
| catchup_bcm_filename   | text                     | catchup当前执行到的bcm文件     |
| catchup_bcm_finished   | integer                  | catchup已经操作完成的bcm文件数量。 |
| catchup_bcm_total      | integer                  | catchup总共需要操作的bcm文件数量。 |
| catchup_percent        | text                     | catchup已经操作完成的百分比。     |
| catchup_remaining_time | text                     | catchup预估剩余时间。         |
   
#### pgxc_lock_for_backup()
描述：备份前给集群加锁，备份是为了在新增节点上执行恢复操作。
返回值类型：boolean
![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
pgxc_lock_for_backup是在使用gs_dump或gs_dumpall工具备份集群前，用来给集群加锁的。当给集群加锁后，不允许有改变系统结构的操作。该函数不影响DML语句。
示例：
```
SELECT pgxc_lock_for_backup();
 pgxc_lock_for_backup
----------------------
 t
(1 row)
```
