我是 PostgreSQL 触发器的新手。
在这个例子中我有 3 个表table1
,table2
并且table3
。
- 触发器在 上触发新记录
table1
。 - 触发器函数循环遍历与来自 的新记录
table2
相同的所有记录。product_id
table1
table3
它从前 2 个表中插入一些混合值。- 之后,将相同的
INSERT
查询插入到测试表中以进行测试。
问题是INSERT
ontable3
没有发生。测试表很好,记录的INSERT
插入查询可以毫无问题地执行,所以我不知道为什么它没有在触发器/函数中执行。
创建或替换函数 my_trigger() 将触发器返回为 $my_trigger$ 声明 r 记录; 开始 FOR r IN SELECT t2.id_t2, t2.name_1, t2.name_2, t2.name_3 FROM table2 t2 WHERE t2.product_id=NEW.product_id 环形 EXECUTE 'INSERT INTO table3 (id_t3, id_t1, name_1, name_2, name_3, bool_t2) VALUES (' || r.id_t2 || ',' || NEW.id_t1 || ', ''' || r.name_1 || ''',''' || r.name_2 || ''',''' || r.name_3 || ''', TRUE);'; INSERT INTO test (field1, field2) VALUES(r.id_t2, 'INSERT INTO table3 (id_t3, id_t1, name_1, name_2, name_3, bool_t2) VALUES (' || r.id_t2 || ',' || NEW.id_t1 | | ', ''' || r.name_1 || ''',''' || r.name_2 || ''',''' || r.name_3 || ''', TRUE);') ; 结束循环; 返回新的; 结尾; $my_trigger$ 语言 plpgsql;
编辑:正如@Rachcha 所问,触发器本身是这样定义的:
CREATE TRIGGER my_trigger
AFTER INSERT
ON table1
FOR EACH ROW
EXECUTE PROCEDURE my_trigger();
编辑 2:我也尝试过不插入EXECUTE
,但结果是一样的:没有错误,但没有插入table3
.