1.Base基础/3.Icon图标/操作/search备份
1.Base基础/3.Icon图标/操作/search备份
EN
文档
关于AntDB
部署与升级
快速入门
使用教程
运维
调优
工具和插件
高级服务
数据安全
参考
  • 文档首页 /
  • 工具和插件 /
  • 集中式 /
  • pg_surgery

pg_surgery

更新时间:2024-07-01 14:39:41

pg_surgery 插件描述

AntDB 支持 pg_surgery 扩展, 该扩展提供了两个函数:

  • heap_force_freeze - 强制要冻结 tuple
  • heap_force_kill - 强制删除 tuple

使用准备

  • 修改配置文件后重启数据库
# 修改postgresql.conf文件
shared_preload_libraries = 'credcheck'
  • 登陆数据库,执行 SQL 命令,创建扩展
CREATE EXTENSION pg_surgery;

使用方法

使用 \dx+ pg_surgery 可以查看 pg_surgery 下的两个函数:

# 查看pg_surgery下的两个函数
antdb=# \dx+ pg_surgery
     Objects in extension "pg_surgery"
             Object description
--------------------------------------------
 function heap_force_freeze(regclass,tid[])
 function heap_force_kill(regclass,tid[])
(2 rows)

函数介绍:

heap_force_kill(regclass, tid[]) returns void

该函数在未检查元组的情况下将“已用”行指针标记为“已死”。此函数的预期用途是强制删除无法访问的元组。

heap_force_freeze(regclass, tid[]) returns void

该函数在不检查元组数据的情况下将元组标记为冻结。此函数的预期用途是生成可访问的元组,这些元组由于可见性信息损坏而无法访问,或者由于可见性信息丢失而无法成功清空表。

使用范例:

# 创建测试表格并插入数据
antdb=# CREATE TABLE t_surgery(id int);
CREATE TABLE
antdb=# INSERT INTO t_surgery SELECT generate_series(1,5);
INSERT 0 5
antdb=# SELECT xmin, ctid, id FROM t_surgery ;
 xmin | ctid  | id
------+-------+----
 1327 | (0,1) |  1
 1327 | (0,2) |  2
 1327 | (0,3) |  3
 1327 | (0,4) |  4
 1327 | (0,5) |  5
(5 rows)

# freeze单个ctid
antdb=# SELECT heap_force_freeze('test_surgery'::regclass, array[ '(0,1)' ]::tid[]); 
 heap_force_freeze
-------------------

(1 row)

antdb=# SELECT xmin, ctid, id FROM t_surgery ;
 xmin | ctid  | id
------+-------+----
    2 | (0,1) |  1
 1327 | (0,2) |  2
 1327 | (0,3) |  3
 1327 | (0,4) |  4
 1327 | (0,5) |  5
(5 rows)

# freeze多个ctid
antdb=# SELECT heap_force_freeze('t_surgery'::regclass, array[ '(0,2)', '(0,5)' ]::tid[]);  
 heap_force_freeze
-------------------

(1 row)

antdb=# SELECT xmin, ctid, id FROM t_surgery ;
 xmin | ctid  | id
------+-------+----
    2 | (0,1) |  1
    2 | (0,2) |  2
 1327 | (0,3) |  3
 1327 | (0,4) |  4
    2 | (0,5) |  5
(5 rows)

# 删除单个ctid tuple
antdb=# SELECT heap_force_kill('t_surgery'::regclass, array[ '(0,1)' ]::tid[]);
 heap_force_kill
-----------------

(1 row)

antdb=# SELECT xmin, ctid, id FROM t_surgery ;
 xmin | ctid  | id
------+-------+----
    2 | (0,2) |  2
 1327 | (0,3) |  3
 1327 | (0,4) |  4
    2 | (0,5) |  5
(4 rows)

# 删除多个ctid tuple
antdb=# SELECT heap_force_kill('t_surgery'::regclass, array[ '(0,3)', '(0,5)' ]::tid[]);
 heap_force_kill
-----------------

(1 row)

antdb=# SELECT xmin, ctid, id FROM t_surgery ;
 xmin | ctid  | id
------+-------+----
    2 | (0,2) |  2
 1327 | (0,4) |  4
(2 rows)
问题反馈