如何基于第二层自动更新列,触发器,postgreSQL
我是postgreSQL的新手。我有两个表,观察和土地覆盖,我想创建一个触发器,允许根据第二层(表)landcover.code_06根据空间信息更新列observation.land 我的意思是,如果我在QGIS中更新点图层观测,我希望在属性表中,列LAND中的信息与列CODE_06中的信息相同 我创造了这个,但我不知道,是什么错了,为什么它不起作用如何基于第二层自动更新列,触发器,postgreSQL,postgresql,triggers,qgis,Postgresql,Triggers,Qgis,我是postgreSQL的新手。我有两个表,观察和土地覆盖,我想创建一个触发器,允许根据第二层(表)landcover.code_06根据空间信息更新列observation.land 我的意思是,如果我在QGIS中更新点图层观测,我希望在属性表中,列LAND中的信息与列CODE_06中的信息相同 我创造了这个,但我不知道,是什么错了,为什么它不起作用 这: 没有任何意义 看起来您试图使用子查询而不是简单的表达式,但是没有SELECT关键字。即使在PL/PgSQL中,也不能这样做。如果它不仅仅
这: 没有任何意义 看起来您试图使用子查询而不是简单的表达式,但是没有
SELECT
关键字。即使在PL/PgSQL中,也不能这样做。如果它不仅仅是一个没有SQL查询关键字的简单表达式,那么它必须是一个有效的查询
尝试:
是的,语法很难看
如果仍然存在问题,请检查PostgreSQL server错误日志。它们将包含错误消息,指示执行PL/PgSQL函数时出现的错误,这将帮助您找到其他错误。只是猜测:
SELECT observation.land to NEW.land FROM…
x-post to
ALTER TABLE observation ADD COLUMN land varchar (20)
CREATE OR REPLACE FUNCTION landinfo_land()
RETURNS trigger AS
$BODY$
BEGIN
NEW.land := observation.land
FROM observation.land AS b, landcover.code_06 AS w
WHERE w.geom && NEW.geom AND
ST_Intersects(ST_PointOnSurface(NEW.geom), b.geom);
RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION landinfo_land() OWNER TO postgres;
CREATE TRIGGER update_land_value
BEFORE INSERT OR UPDATE
ON observation
FOR EACH ROW
EXECUTE PROCEDURE landinfo_land();
NEW.land := observation.land
FROM observation.land AS b, landcover.code_06 AS w
WHERE w.geom && NEW.geom AND
ST_Intersects(ST_PointOnSurface(NEW.geom), b.geom);
SELECT INTO STRICT NEW.land observation.land
FROM observation.land AS b, landcover.code_06 AS w
WHERE w.geom && NEW.geom AND
ST_Intersects(ST_PointOnSurface(NEW.geom), b.geom);