使用if语句在触发器中更正SQL表别名语法

时间:2017-06-01 11:15:42

标签: sql postgresql postgis

所以基本上我正在尝试创建一个触发器,如果​​插入或更新位于距现有距离不到1米的位置,它将更新另一个表。

它不允许我插入任何内容,因为if语句中缺少FROM子句,我不知道如何正确调用它。

我得到以下

 CREATE TRIGGER access_node_aiu
 AFTER INSERT OR UPDATE
 ON schemab.table
 FOR EACH ROW
 EXECUTE PROCEDURE schemab.trigegr();

 CREATE OR REPLACE FUNCTION schemab.trigger()
 RETURNS trigger AS
 $BODY$
BEGIN

    if st_distance(new.geom, a.geom) < 1 then
INSERT INTO schemab.overlap
SELECT nextval('schemab.overlap_id_seq'::regclass), a.node_id, new.node_id, a.date, now(), st_distance(a.geom, new.geom), new.geom
FROM schemab.table a;
end if;

    RETURN new; 
END;
$BODY$
 LANGUAGE plpgsql VOLATILE
 COST 100;

如何在postgresql中执行此操作?

1 个答案:

答案 0 :(得分:1)

将IF更改为WHERE

CREATE OR REPLACE FUNCTION schemab.trigger()
 RETURNS trigger AS
 $BODY$
BEGIN

INSERT INTO schemab.overlap
SELECT nextval('schemab.overlap_id_seq'::regclass), a.node_id, new.node_id, a.date, now(), st_distance(a.geom, new.geom), new.geom
FROM schemab.table a
WHERE st_distance(new.geom, a.geom) < 1;

    RETURN new; 
END;
$BODY$
 LANGUAGE plpgsql VOLATILE
 COST 100;