我正在编写一个同步 PostgreSQL 和 MS SQL 服务器数据库的程序(并在此转换中添加一些更改)。拥有数百万条记录,需要很长时间,并且加载服务器非常糟糕select *
;它还需要更多资源来解析未更改的记录并针对 MS SQL 服务器验证它们。
PostgreSQL 中是否有任何日志可以解析以找出在最后 n 分钟内发生的更改?这将允许我只选择那些我需要工作的记录;提高性能。
我正在编写一个同步 PostgreSQL 和 MS SQL 服务器数据库的程序(并在此转换中添加一些更改)。拥有数百万条记录,需要很长时间,并且加载服务器非常糟糕select *
;它还需要更多资源来解析未更改的记录并针对 MS SQL 服务器验证它们。
PostgreSQL 中是否有任何日志可以解析以找出在最后 n 分钟内发生的更改?这将允许我只选择那些我需要工作的记录;提高性能。
Postgresql,查找最近 n 分钟内的变化:
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'
drop table foo;
CREATE TABLE foo(
msg character varying(20),
created_date date,
edited_date timestamp
);
insert into foo values( 'splog adfarm coins', '2015-01-01', current_timestamp);
insert into foo values( 'execute order 2/3', '2020-03-15', current_timestamp);
insert into foo values( 'deploy wessels', '2038-03-15', current_timestamp);
select * from foo where created_date < to_date('2020-05-05', 'YYYY-mm-DD');
┌────────────────────┬──────────────┬────────────────────────────┐
│ msg │ created_date │ edited_date │
├────────────────────┼──────────────┼────────────────────────────┤
│ splog adfarm coins │ 2015-01-01 │ 2020-12-29 11:46:27.968162 │
│ execute order 2/3 │ 2020-03-15 │ 2020-12-29 11:46:27.96918 │
└────────────────────┴──────────────┴────────────────────────────┘
select * from foo where edited_date > to_timestamp(
'2020-12-29 11:42:37.719412', 'YYYY-MM-DD HH24_MI_SS.US');
┌────────────────────┬──────────────┬────────────────────────────┐
│ msg │ created_date │ edited_date │
├────────────────────┼──────────────┼────────────────────────────┤
│ execute order 2/3 │ 2020-03-15 │ 2020-12-29 11:46:27.96918 │
│ deploy wessels │ 2038-03-15 │ 2020-12-29 11:46:27.969988 │
└────────────────────┴──────────────┴────────────────────────────┘
您可以使用此处描述的基于触发器的方法:
http://wiki.postgresql.org/wiki/Audit_trigger
基本上每个表更改都会触发一个触发器,该触发器可以在日志表中写入一些信息。