作为pg的初学者,遇到一个问题,在oracle中delete数据时,可以通过rollback命令来还原数据,而在pg中delete数据时,它会自动提交,那我们如何找回被修改的数据呢?
基于初学者的热情,立马在网上搜索了一番,类似oracle,pg也有一套自己独有的日志系统xlog,相当于oracle的redo。Pg可以通过pg_resetxlog命令来重置事务id,回到修改数据时的那个事务id,那么问题来了,我们怎样找到修改数据时的那个事务id呢?
又立马在网上遨游了一番,发现了一个好东西pageinspect,这是一个pgsql的extension模块,这个模块可以查看数据库底层page的内容,进而可以找到修改数据那个时刻的事务id。
下面我们看下postgres数据库里的xlog系统是怎样的?
[ PostgreSQL XLOG概念 ]在10之前,postgresql的日志系统是XLOG,在之后的版本是WAL。什么是WAL(write-ahead-logging)呢?
顾名思义,就是写在前面的日志,就是事务和数据故障的一个保护,防止出现故障而导致数据丢失。任何修改数据库数据的操作都会自动生成一条记录,并将其记录到日志文件中。这里的日志就是xlog,所有的日志都会写在$PGDATA/pg_xlog目录下面。
和oracle一样,postgresql数据库也会发生日志切换。首先&#