テーブルがあるとします
create table foo (
insert_current timestamp default now(),
insert_previous timestamp,
bar int primary key,
baz varchar(10)
);
データは、新しいバッチが到着したときに時々置き換えられます。以前のバッチがいつ挿入されたか、および現在のタイムスタンプを追跡したいと思います。これを行うにはどうすればよいでしょうか。
テーブルがあるとします
create table foo (
insert_current timestamp default now(),
insert_previous timestamp,
bar int primary key,
baz varchar(10)
);
データは、新しいバッチが到着したときに時々置き換えられます。以前のバッチがいつ挿入されたか、および現在のタイムスタンプを追跡したいと思います。これを行うにはどうすればよいでしょうか。
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();
行を更新するときは、値をコピーinsert_currentして現在のタイムスタンプにinsert_previous設定します。insert_current
UPDATE foo
SET baz = 'whatever',
insert_previous = insert_current,
insert_current = NOW()
WHERE bar = 1;