闪回/闪回查询
功能描述
在使用表的过程中,可能会出现误删,或者误改数据,此时闪回查询可以通过语句找回INSERT,UPDATE,DELETE操作之前的数据,看到修改表数据前或者删除数据前的数据装填,支持指定时间的闪回查询操作。
注意事项
track_commit_timestamp设置为on。
autovacuum设置为off。
数据表truncate后无法闪回。
闪回时间点的数据没有被autocacuum回收。
使用步骤
1、修改postgresql.conf,添加参数max_flashback_time,开启闪回功能,并重启数据库。
例如设置max_flashback_time=60,即最多允许闪回至60秒之内。
vim postgresql.conf
vb_ctl reatart
2、开启自动提交。
\set AUTOCOMMIT on
\echo :AUTOCOMMIT
3、创建测试表并查询表中数据。
create table t_a (col1 int, col2 char(20),col3 char(20));
insert into t_a values(1,'aa','a1');
insert into t_a values(2,'bb','b1');
insert into t_a values(3,'cc','c1');
SELECT * FROM t_a;
返回结果为:
col1 | col2 | col3
------+----------------------+----------------------
1 | aa | a1
2 | bb | b1
3 | cc | c1
(3 rows)
4、修改表中的数据并查询结果。
select pg_sleep(17);
insert into t_a values (4,'dd','d4');
SELECT * FROM t_a;
返回结果为:
col1 | col2 | col3
------+----------------------+----------------------
1 | aa | a1
2 | bb | b1
3 | cc | c1
4 | dd | d4
(4 rows)
5、进行闪回查询。
select * from t_a FLASHBACK(15);
col1 | col2 | col3
------+----------------------+----------------------
1 | aa | a1
2 | bb | b1
3 | cc | c1
(3 rows)
6、将表闪回至15秒之前。
select pg_flashback('t_a',15);
select * from t_a;
col1 | col2 | col3
------+----------------------+----------------------
1 | aa | a1
2 | bb | b1
3 | cc | c1
(3 rows)