在oracle10G之后;oracle提供一种回收站的机制;即闪回技术。闪回技术通常用于快速简单恢复数据库中出现的认为误操作等逻辑错误。发展到11G之后;回收站更加完善;对在可闪回时间内;数据库级别的恢复。
 
      postgresql本身未支持闪回技术的;目前没有像oracle闪回技术的功能;目前postgresql实现这种功能原理是:在drop table时;创建一个名为Trash的schema, 然后将被删除的表移动到这个schema下面.     
 
安装操作
su - root
git clone https://github.com/petere/pgtrashcan
cd pgtrashcan/
export PATH=/opt/pgsql/bin:$PATH             --根据环境来设定
make
make install

修改postgresql.conf文件

shared_preload_libraries = 'pgtrashcan'

在重新启动postgresql数据库

 
1.  drop table操作验证

mydb=> drop table t;
DROP TABLE
mydb=> \dn
  List of schemas
  Name  |  Owner
--------+----------
 Trash  | lottu
 public | postgres
(2 rows)

mydb=> \dt+ "Trash".t;
                    List of relations
 Schema | Name | Type  | Owner |    Size    | Description
--------+------+-------+-------+------------+-------------
 Trash  | t    | table | lottu | 8192 bytes |
(1 row)

mydb=> select * from "Trash".t;
 generate_series
-----------------
               1
               2
               3
               4
               5
               6
               7
               8
               9
              10
(10 rows)
可以看到;表T在被drop掉;postgres会新建一个Trash的模式;把表T移到这里。 假如环境配有hot standby;备库也会跟主库保持一致。
这样可以保证数据在被drop掉;在Trash下面有个复制。可以保证数据及时回复。
 
2. 清理回收站
   我们知道一个方案下;不能存放两个名字相同的表名;在确定里面其中表不需要恢复情况下。可以进行清理。

mydb=> \dt "Trash".*;
       List of relations
 Schema | Name | Type  | Owner
--------+------+-------+-------
 Trash  | t    | table | lottu
 Trash  | t8   | table | lottu
 Trash  | test | table | lottu
(3 rows)

--清理一个表;
mydb=> drop table "Trash".t;
DROP TABLE
mydb=> \dt "Trash".*;
       List of relations
 Schema | Name | Type  | Owner
--------+------+-------+-------
 Trash  | t8   | table | lottu
 Trash  | test | table | lottu
(2 rows)

--若确定所有表不需要恢复
mydb=> drop schema "Trash" cascade;
NOTICE:  drop cascades to 2 other objects
DETAIL:  drop cascades to table "Trash".t8
drop cascades to table "Trash".test
DROP SCHEMA

postgresql如何实现回收站机制的更多相关文章

  1. ORACLE回收站机制介绍

    回收站概念 从ORACLE 10g开始,引入了一个叫回收站(Recycle Bin)的概念.它的全称叫Tablespace Recycle Bin.回收站实际是一个逻辑容器(逻辑区域),原理有点类似于 ...

  2. Centos实现回收站机制

    作为一个运维人员,在服务器上删除文件时为了方便经常会直接使用rm *.txt这类通配符,甚至为了省事加-rf参数,如果是确定的话还好,要是在删除的时候一个不留神,那事可就大了. 俗话说常在河边站哪有不 ...

  3. 数据库并发事务控制四:postgresql数据库的锁机制二:表锁 <转>

    在博文<数据库并发事务控制四:postgresql数据库的锁机制 > http://blog.csdn.net/beiigang/article/details/43302947 中后面提 ...

  4. 系统优化——建立linux回收站机制

    前言: linux系统下的rm是不可挽回的,命令设计本身没有问题,问题在于我们通常非常的自信,执行的时候喜欢rm -rf,这样的话就非常危险了,在执行的时候如果执行命令不对,甚至是执行的目录不对,那么 ...

  5. PostgreSQL 预写日志机制(WAL)

    关于持久性 持久性是指,事务提交后,对系统的影响必须是永久的,即使系统意外宕机,也必须确保事务提交时的修改已真正永久写入到永久存储中. 最简单的实现方法,当然是在事务提交后立即刷新事务修改后的数据到磁 ...

  6. postgresql的日志实现机制

    1.事务的概念   事务是从实际生活中引入数据库的一个概念,即事务内的操作,要么全做,要么全不做.就像银行转账一样,当从一个帐户转出一部分钱之后,就必须在另一个帐户中存入相同数目的钱,若是转出钱之后, ...

  7. 1.10HDFS 回收站机制

  8. [转载]再谈PostgreSQL的膨胀和vacuum机制及最佳实践

    本文转载自 www.postgres.cn 下的文章: 再谈PostgreSQL的膨胀和vacuum机制及最佳实践http://www.postgres.cn/news/viewone/1/390 还 ...

  9. Sharepoint 2013 回收站知识整理

    回收站机制可有利于防止内容的永久删除与误删除. 一.SharePoint 2013 回收站包括两种:第一回收站(End user Recycle Bin items)与 第二回收站(Deleted f ...

随机推荐

  1. OpenERP在哪储存附件?

    我们知道对OpenERP中的每个内部对象(比如:业务伙伴,采购订单,销售订单,发货单,等等)我们都可以添加任意的附件,如图片,文档,视频等.那么这些附件在OpenERP内部是如何管理的呢? 默认情况下 ...

  2. android几个实用的判定代码

    之前项目有几个判定代码很实用,特此做一个整理. 一.验证手机格式是否正确 //判断手机号码是否合理 private boolean judgePhoneNums(String phoneNums) { ...

  3. $.ajax用法与举例

    下面是一段比较常用到的 $.ajax 方法: $.ajax({ type:'GET', url:'http://www.phpernote.com/jquery.php', data:{usernam ...

  4. ajaxfileupload.js支持多文件上传【转载】

    //修改前代码------- //var oldElement = jQuery('#' + fileElementId); //var newElement = jQuery(oldElement) ...

  5. 读取文件内容fopen,fgets,fclose

    <?php //首先采用“fopen”函数打开文件,得到返回值的就是资源类型.$file_handle = fopen("/data/webroot/resource/php/f.tx ...

  6. //sql过滤关键字

    //sql过滤关键字 public static bool CheckKeyWord(string sWord) { //过滤关键字 string StrKeyWord = @"select ...

  7. c#根据后台数据,自动生成checkbox

    前端在aspx中,添加生成checkbox的容器div: <div id="container" runat="server"></div&g ...

  8. 本地化word复制来的网页中的图片

    复制一个网页到word文档中,图片会以链接到网页里图片,而不是本地化保存在文档里.为了让图片存在文档里,而不是每次链接到外部,可以这样做. 全选文档,菜单栏里的编辑,点击链接,断开所有链接. 然后再复 ...

  9. jquery实现nav的下拉

    <script type="text/javascript"> $(function(){ //tab_flag 根据此标记判断是否由父级nav指向了nav_list ...

  10. java中获取日期和时间的方法总结

    1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下:  要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...