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操作,如增加表的列、删除表的列、增加索引、创建序列等。