Postgresql
執行觸發器時將插入的行複製到新表中
我創建了 2 個這樣的表:
CREATE TABLE task ( task_name TEXT NOT NULL, duration INT, UNIQUE(task_name) ); CREATE TABLE temptable ( task_name TEXT NOT NULL, duration INT NULL, );
然後我在“任務”表中插入一行。
INSERT INTO public.task( task_name, duration) VALUES ('task1', 10);
每次我將新記錄添加到任務表中時,我都想在臨時表中插入一個新的同一行所以我創建了一個觸發器以同時在“temptale”中自動插入數據
CREATE OR REPLACE FUNCTION update_temptable() RETURNS TRIGGER AS $$ BEGIN -- insert temporary row INSERT INTO temptable(task_name, duration) SELECT NEW.task_name , NEW.duration FROM task; RETURN NEW; END $$ LANGUAGE 'plpgsql'; /* Create trigger call function*/ CREATE TRIGGER ins_new_record AFTER INSERT ON task FOR EACH ROW EXECUTE PROCEDURE update_temptable();
但是當我將新行(’task 2’,10)插入’task’表時,插入’temptable’表的記錄總是像這樣重複。
task_name|duration| |"task2" |10 | ------------------- |"task2" |10 |
我不知道如何解決它。誰能幫我?謝謝。
觸發器中的語句:
INSERT INTO temptable (task_name, duration) SELECT NEW.task_name , NEW.duration FROM task;
將插入盡可能多的行
temptable
到task
. 為 中的SELECT
每一行返回一個結果行task
,並且由於SELECT
列表僅包含常量,所有這些結果行看起來都相同。你想插入一行,所以你應該使用
INSERT INTO temptable (task_name, duration) VALUES (NEW.task_name , NEW.duration);