当在PostgreSQL中插入新行时,触发器更新表列的方法是什么?

3
我想编写触发器,在插入新行时更新表。我正在使用如下更新查询:
UPDATE table SET
  geom = ST_SetSRID(ST_MakePoint(longitude, latitude), 4326) 
2个回答

7
你需要使用一个BEFORE触发器,然后分配新值:
CREATE OR REPLACE FUNCTION function_update()
  RETURNS trigger AS
$BODY$
BEGIN
    new.geom := ST_SetSRID(ST_MakePoint(new.longitude, new.latitude), 4326);
    RETURN new;
END;
$BODY$
LANGUAGE plpgsql;

这只能在 BEFORE 触发器中完成:

CREATE TRIGGER triggerinsert
  BEFORE INSERT
  ON rdpr
  FOR EACH ROW
  EXECUTE PROCEDURE function_update();

0
我通过编写触发器函数解决了这个问题。
CREATE OR REPLACE FUNCTION function_update()
  RETURNS trigger AS
$BODY$
BEGIN
   new.geom := ST_SetSRID(ST_MakePoint(new.longitude, new.latitude), 4326);

RETURN new;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION function_update()
  OWNER TO postgres;

我写了触发器来进行更新

CREATE TRIGGER triggerinsert
  Before INSERT
  ON rdpr
  FOR EACH ROW
  EXECUTE PROCEDURE function_update();

为什么 "not working" 在前面?你尝试过我回答中的示例吗?而且你不应该使用 update,因为它比简单更改插入的行要慢得多。 - user330315
然后以相同的方式分配给它们。 - user330315
经纬度(lat,long)正在插入到一个表中,即rdpr表,然后我想用geom更新另一个表,即rdprgeom表。现在我如何在同一张表中进行更新呢?我尝试过了,但没有成功。 - undefined
当我将我的函数更改为在其他表中插入时,出现错误,错误信息为“列“longitude”不存在”。 - undefined
我编写了一个更新函数,类似于"insert into rdprgeo(geom) values(new.geom = ST_SetSRID(ST_MakePoint(45, 45), 4326));"。 - undefined
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接