ud_recyclebin

简介

ud_recyclebin 是 uvndb 数据库实现的回收站特性功能。 当用户执行 DROP TABLE 时,会将表进行重命名,并将表的模式改为 recyclebin ,而非实际删除。


配置说明

unvdbsvr.conf 中设置以下参数以启用回收站特性:

shared_preload_libraries = 'ud_recyclebin' 

重启数据库以生效

参数

ud_recyclebin.enable

是否启用回收站功能。默认值是 ON,表示启用回收站的功能。同时支持在会话上下文中设置该值。

使用例子

  --创建test表,模式为 pubic
  CREATE TABLE public.test(id INT, name TEXT);
  INSERT INTO public.test values(1, 'Bob');
  SELECT * FROM public.test;

  --删除test表,默认会将表移入回收站中
  DROP TABLE public.test;

  -- 查看回收站的表信息
  \dt recyclebin.*

  -- 查看 test 表在回收站的名字
  SELECT relname as tname 
    FROM pg_class 
    WHERE relnamespace='recyclebin'::regnamespace AND relname like '%test%' LIMIT 1;

  \gset --将上述查询的表新的名字暂时存起来,用于后续恢复
  \echo :tname --打印表名
  
  -- 恢复 test 表
  ALTER TABLE recyclebin.:tname SET SCHEMA public; -- 1. 先更改表的模式为 public (将表移出回收站)
  ALTER TABLE public.:tname RENAME TO test; -- 2. 再将表重新命名为 test

  SELECT * FROM public.test;

注意事项

  • 临时表不会移入回收站;

  • 如果表存在外键、移入回收站时,外键会自动被移除;

  • 如果表是一个分区子表,移入回收站时,会自动与父分区表分开(DETACH);

  • 表重命名方式为: bin_nspid_tablename_ptr (nspid 为模式的 oid, ptr 为 wal 日志写入的最新位置,二者以 16 进制表示,tablename 为表原先的名字);

  • 恢复时,需要手动执行 ALTER TABLE 命令将表恢复至原先模式(schema)下;

  • 不支持 DROP TABLE [tablename] CASCADE 操作(需要在会话中关闭回收站即可使用原本的DROP TABLE CASCADE);

  • 不支持对回收站的表执行 DML 操作;

  • 限制对回收站的表执行一些 DDL 操作,如增加表的列、删除表的列、增加索引、创建序列等。