在使用转换表上的 Qfield 收集数据后,我正在使用转换表导入源表中的行。
此功能非常适合导入行:
CREATE OR REPLACE FUNCTION shema.function_name()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
BEGIN
INSERT INTO
shema.transition_table (field1, field2, field3)
VALUES(NEW.*);
RETURN new;
END;
$BODY$;
这是触发器(在转换表内)
CREATE OR REPLACE TRIGGER trigger_name
AFTER INSERT
ON shema.transition_table
FOR EACH ROW
EXECUTE FUNCTION shema.function_name();
它运行良好,但现在我想在导入后截断转换表。
我尝试过很多事情,但都失败了。我是一个有触发器的初学者。
你能帮我添加这个截断吗?
谢谢你。
它运行良好,但现在我想在导入后截断转换表。
我尝试过很多事情,但都失败了。我是一个有触发器的初学者。
你能帮我添加这个截断吗?
谢谢你。
您正在显示一个触发器,该触发器试图将所有相同的行插入到完全相同的表中,从而陷入无限循环。
我的猜测是您的意思是让触发器将最新的插入有效负载保存到不同的表中,首先擦除它:
CREATE OR REPLACE FUNCTION shema.function_name()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
BEGIN
TRUNCATE TABLE shema.transition_table2;
INSERT INTO shema.transition_table2 (field1, field2, field3)
VALUES(NEW.*);
RETURN new;
END;
$BODY$;
如果您打算“重新路由”行,并且每当它们插入到
table1
中时,您希望触发器将它们插入到 table2
中,然后从 table1
擦除它们 - 您可以将其设为 before
重新路由插入后返回 null
的触发器。它有效地阻止行到达table1
:
CREATE OR REPLACE FUNCTION shema.function_name()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
BEGIN
INSERT INTO shema.transition_table2 (field1, field2, field3)
VALUES(NEW.*);
RETURN null;
END;
$BODY$;
CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT
ON shema.transition_table1
FOR EACH ROW
EXECUTE FUNCTION shema.function_name();