我正在编写一个同步PostgreSQL和MS SQL服务器数据库的程序(并在此转换中添加了一些更改)。拥有数百万条记录,需要花费很长时间,并且使用select *
加载服务器非常糟糕;它还需要更多资源来解析未更改的记录并根据MS SQL服务器验证它们。
我是否可以解析PostgreSQL中的任何日志以找出最近n分钟内发生的变化?这将允许我只选择那些我需要工作的记录;提高绩效。
答案 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
基本上每个表更改都会触发一个触发器,该触发器可以在日志表中写入一些信息。