18

私は PostgreSQL と MS SQL サーバー データベースを同期するプログラムを書いています (そして、この移行にいくつかの変更を加えています)。数百万のレコードがあると、長い時間がかかり、サーバーにかなり悪い負荷がかかりますselect *。また、変更されていないレコードを解析し、MS SQL サーバーに対して検証するために、より多くのリソースが必要になります。

過去 n 分間に発生した変更を確認するために解析できる PostgreSQL のログはありますか? これにより、作業が必要なレコードのみを選択できます。パフォーマンスの向上。

4

2 に答える 2

35

Postgresql、過去 n 分間の変更を検索:

Postgresql は、行が追加/更新/削除された日付または時刻を自動的に保存しません (このようなタイムスタンプを処理したくない場合は、処理が非常に遅くなります)。

自分でやる必要があります: テーブルにタイムスタンプ列を追加します。テーブルに行を挿入すると、タイムスタンプ列がcurrent_timestamp. 行を選択するときは、次のように、timestamp が N 分前よりも大きい場所をフィルタリングする select ステートメントを使用します。

タイムスタンプが日付より大きい行を取得します。

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 │ 
    └────────────────────┴──────────────┴────────────────────────────┘ 
于 2012-12-07T17:50:43.147 に答える
4

ここで説明されているトリガーベースのアプローチを使用できます。

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

基本的に、すべてのテーブルの変更は、ログ テーブルに情報を書き込むことができるトリガーを起動します。

于 2012-12-07T18:27:06.713 に答える