レコードを挿入または更新する前に、PostgreSQL で同じレコードをチェックする (つまり、既存のレコードid
と比較する)トリガー関数を作成しようとしています。id
関数が同じ を持つレコードを見つけた場合、id
そのエントリは に設定されますtime_dead
。この例で説明しましょう:
INSERT INTO persons (id, time_create, time_dead, name)
VALUES (1, 'now();', ' ', 'james');
次のようなテーブルが欲しいです。
id time_create time-dead name
1 06:12 henry
2 07:12 muka
id 1
ありましたtime_create 06.12
が、ありtime_dead
ましたNULL
。これは と同じですが、次に同じ ID で異なる名前id 2
のクエリを実行しようとすると、次のようなテーブルが得られるはずです。insert
id time_create time-dead name
1 06:12 14:35 henry
2 07:12 muka
1 14:35 waks
ヘンリーとワクスは同じものを共有していid
1
ます。insert
クエリを実行すると、henry'stime_dead
は waks' と等しくなりtime_create
ます。別のエントリが id 1 で作成された場合、たとえば james の場合、james の時間エントリはtime_dead
for waks と同じになります。等々。
これまでのところ、私の機能は次のようになっています。しかし、それは機能していません:
CREATE FUNCTION tr_function() RETURNS trigger AS '
BEGIN
IF tg_op = ''UPDATE'' THEN
UPDATE persons
SET time_dead = NEW.time_create
Where
id = NEW.id
AND time_dead IS NULL
;
END IF;
RETURN new;
END
' LANGUAGE plpgsql;
CREATE TRIGGER sofgr BEFORE INSERT OR UPDATE
ON persons FOR each ROW
EXECUTE PROCEDURE tr_function();
私がこれを実行すると、発言time_dead
は想定されていませんnull
。trigger function
自動的に時刻を入力するが、クエリinserting or updating
を実行すると上記の表のような結果が得られる を作成する方法はありますか?select
私は何を間違っていますか?
私の2つのテーブル:
CREATE TABLE temporary_object
(
id integer NOT NULL,
time_create timestamp without time zone NOT NULL,
time_dead timestamp without time zone,
PRIMARY KEY (id, time_create)
);
CREATE TABLE persons
(
name text
)
INHERITS (temporary_object);