3

テーブルがあるとします

create table foo (
    insert_current timestamp default now(),
    insert_previous timestamp,
    bar int primary key,
    baz varchar(10)
);

データは、新しいバッチが到着したときに時々置き換えられます。以前のバッチがいつ挿入されたか、および現在のタイムスタンプを追跡したいと思います。これを行うにはどうすればよいでしょうか。

4

2 に答える 2

3

UPDATE ステートメントで insert_current と insert_previous を自動的に設定するトリガーを作成します。

まず、トリガー関数を作成します。

CREATE OR REPLACE FUNCTION do_update() RETURNS "trigger"
AS $$
BEGIN
    NEW.insert_previous := OLD.insert_current;
    NEW.insert_current := NOW();
    return NEW;
END;
$$
LANGUAGE plpgsql;

次に、トリガーをテーブルに追加します。

CREATE TRIGGER do_update
BEFORE UPDATE ON foo
FOR EACH ROW
EXECUTE PROCEDURE do_update();
于 2012-05-24T07:04:26.930 に答える
3

行を更新するときは、値をコピーinsert_currentして現在のタイムスタンプにinsert_previous設定します。insert_current

UPDATE foo
   SET baz = 'whatever',
       insert_previous = insert_current,
       insert_current  = NOW()
 WHERE bar = 1;
于 2012-05-24T04:50:54.763 に答える