暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL flashback(闪回)

原创 Allen duan 2020-12-24
3745

PostgreSQL flashback(闪回) 功能实现

  1. 准备工作
    修改postgresql.conf ($PGDATA/postgresql.conf)
    vacuum_defer_cleanup_age = 1000000 # 延迟100万个事务再回收垃圾,误操作后在100万个事务内
    vacuum_freeze_min_age = 50000000—依据事务号大小定值
    track_commit_timestamp = on # 开启事务结束时间跟踪

  2. 配置脏读插件
    2.1 准备一个 pg_dirtyread-master.zip
    2.2 解压,在解压文件夹里执行make make install 或者配置环境变量进行make 和make install作业env PG_CONFIG=/path/to/pg_config make && make install
    2.3 CREATE EXTENSION pg_dirtyread;
    这里可能会报错找不到pg_dirtyread文件路径,这是因为解压档下的重要文件没有出现在路径中,解决方法是将pg_dirtyread-master下的
    -rw-r–r-- 1 root root 130 Oct 12 18:55 pg_dirtyread–1.0–2.sql
    -rw-r–r-- 1 root root 88 Oct 12 18:55 pg_dirtyread–1.0.sql
    -rw-r–r-- 1 root root 96 Oct 12 18:55 pg_dirtyread–2.sql
    -rw-r–r-- 1 root root 5020 Oct 12 18:55 pg_dirtyread.c
    -rw-r–r-- 1 root root 150 Oct 12 18:55 pg_dirtyread.control
    -rw-r–r-- 1 root root 86984 Oct 29 15:34 pg_dirtyread.o
    放入目录PGHOME/ share/postgresql/extension/下 -rwxr-xr-x 1 root root 68413 Oct 29 15:34 pg_dirtyread.so 放入目录PGHOME/lib/postgresql
    再执行CREATE EXTENSION pg_dirtyread;就会显示成功了
    此时你可以测试下是否可用
    postgres=# CREATE TABLE test02 (bar bigint, baz text);
    postgres=# ALTER TABLE test02 SET (
    autovacuum_enabled = false, toast.autovacuum_enabled = false
    );

postgres=# INSERT INTO test02 VALUES (1, ‘Test’), (2, ‘New Test’);

postgres=# select * from test02;
bar | baz
-----±---------
1 | Test
2 | New Test
(2 rows)

postgres=# DELETE FROM test02 WHERE bar = 1 or bar=2 ;
DELETE 2
postgres=# select * from test02;
bar | baz
-----±----
(0 rows)

postgres=# SELECT * FROM pg_dirtyread(‘test02’) as t(bar bigint, baz text);
bar | baz
-----±---------
1 | Test
2 | New Test
(2 rows)

======发现可以找到被误删除的数据

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论