PostgreSQL如何在最后的n分钟内找到任何变化

时间:2012-12-07 17:42:55

标签: postgresql logging changelog

我正在编写一个同步PostgreSQL和MS SQL服务器数据库的程序(并在此转换中添加了一些更改)。拥有数百万条记录,需要花费很长时间,并且使用select *加载服务器非常糟糕;它还需要更多资源来解析未更改的记录并根据MS SQL服务器验证它们。

我是否可以解析PostgreSQL中的任何日志以找出最近n分钟内发生的变化?这将允许我只选择那些我需要工作的记录;提高绩效。

2 个答案:

答案 0 :(得分:18)

Postgresql,在最近n分钟内找到更改:

Postgresql不会自动存储添加/更新/删除行的时间(对于postgresql来说,如果你不想这样做,它会真的减慢这个时间戳的处理速度。)

您必须自己完成:向表中添加时间戳列。向表中插入行时,请将时间戳列更新为current_timestamp。当您选择行时,请使用select语句,该语句在时间戳大于N分钟前的位置进行过滤,如下所示:

获取时间戳大于日期的行:

SELECT * from yourtable 
WHERE your_timestamp_field > to_date('05 Dec 2000', 'DD Mon YYYY');

获取最近n分钟内已更改的行:

SELECT * from yourtable 
WHERE your_timestamp_field > current_timestamp - interval '5 minutes'

答案 1 :(得分:3)

您可以使用此处描述的基于触发器的方法:

http://wiki.postgresql.org/wiki/Audit_trigger

基本上每个表更改都会触发一个触发器,该触发器可以在日志表中写入一些信息。