更新时间:2024-06-03 GMT+08:00

PURGE

功能描述

使用PURGE语句可以实现如下功能:

  • 从回收站中清理表或索引,并释放对象相关的全部空间。
  • 清理回收站。
  • 清理回收站中指定表空间的对象。

注意事项

  • 清除(PURGE)操作支持:表(PURGE TABLE)、索引(PURGE INDEX)、回收站(PURGE RECYCLEBIN)。

  • 执行PURGE操作的权限要求如下:

    • PURGE TABLE:用户必须是表的所有者,且用户必须拥有表所在模式的USAGE权限,当三权分立开关关闭时,系统管理员默认拥有此权限。
    • PURGE INDEX:用户必须是索引的所有者,用户必须拥有索引所在模式的USAGE权限,当三权分立开关关闭时,系统管理员默认拥有此权限。
    • PURGE RECYCLEBIN:普通用户只能清理回收站中当前用户拥有的对象,且用户必须拥有对象所在模式的USAGE权限,当三权分立开关关闭时,系统管理员默认可以清理回收站所有对象。

前提条件

  • 开启enable_recyclebin参数,启用回收站,参数使用请联系管理员处理
  • recyclebin_retention_time参数用于设置回收站对象保留时间,超过该时间的回收站对象将被自动清理,参数使用请联系管理员处理

语法格式

PURGE { TABLE [schema_name.]table_name          
        | INDEX index_name         
        | RECYCLEBIN       
      };

参数说明

  • schema_name

    模式名。

  • TABLE [ schema_name. ] table_name

    清空回收站中指定的表,可用模式名修饰。

  • INDEX index_name

    清空回收站中指定的索引。

  • RECYCLEBIN

    清空回收站中的所有对象。

示例

--创建表reason_t1。
gaussdb=# CREATE TABLE reason_t1(
    r_reason_sk    integer,
    r_reason_id    character(16),
    r_reason_desc  character(100)
) WITH(STORAGE_TYPE = ustore);

--创建表reason_t2。
gaussdb=# CREATE TABLE reason_t2(
    r_reason_sk    integer,
    r_reason_id    character(16),
    r_reason_desc  character(100)
) WITH(STORAGE_TYPE = ustore);

-- 对表reason_t1和reason_t2添加索引。
gaussdb=#  CREATE INDEX idx_t1 on reason_t1(r_reason_id); 
gaussdb=#  CREATE INDEX idx_t2 on reason_t2(r_reason_id); 
gaussdb=#  DROP TABLE reason_t1;
gaussdb=#  DROP TABLE reason_t2;

--查看回收站。
gaussdb=#  SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;
          rcyname           | rcyoriginname | rcytablespace 
----------------------------+---------------+---------------
 BIN$31C94EB4207$8001$0==$0 | reason_t1     |             0
 BIN$31C94EB420D$8001$0==$0 | idx_t1        |             0
 BIN$31C94EB420A$8004$0==$0 | reason_t2     |             0
 BIN$31C94EB420E$8004$0==$0 | idx_t2        |             0
(4 rows)

--PURGE清除表。
gaussdb=#  PURGE TABLE reason_t1;
gaussdb=#  SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;
          rcyname           | rcyoriginname | rcytablespace 
----------------------------+---------------+---------------
 BIN$31C94EB420A$8004$0==$0 | reason_t2     |             0
 BIN$31C94EB420E$8004$0==$0 | idx_t2        |             0
(2 rows)

--PURG清除索引。
gaussdb=# PURGE INDEX idx_t2;
gaussdb=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;
          rcyname           | rcyoriginname | rcytablespace 
----------------------------+---------------+---------------
 BIN$31C94EB420A$8004$0==$0 | reason_t2     |             0
(1 row)

--PURGE清除回收站所有对象。
gaussdb=#  PURGE recyclebin;
gaussdb=#  SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;
        rcyname        | rcyoriginname | rcytablespace 
-----------------------+---------------+---------------
(0 rows)