如何基于第二层自动更新列,触发器,postgreSQL

如何基于第二层自动更新列,触发器,postgreSQL,postgresql,triggers,qgis,Postgresql,Triggers,Qgis,我是postgreSQL的新手。我有两个表,观察和土地覆盖,我想创建一个触发器,允许根据第二层(表)landcover.code_06根据空间信息更新列observation.land 我的意思是,如果我在QGIS中更新点图层观测,我希望在属性表中,列LAND中的信息与列CODE_06中的信息相同 我创造了这个,但我不知道,是什么错了,为什么它不起作用 这: 没有任何意义 看起来您试图使用子查询而不是简单的表达式,但是没有SELECT关键字。即使在PL/PgSQL中,也不能这样做。如果它不仅仅

我是postgreSQL的新手。我有两个表,观察和土地覆盖,我想创建一个触发器,允许根据第二层(表)landcover.code_06根据空间信息更新列observation.land

我的意思是,如果我在QGIS中更新点图层观测,我希望在属性表中,列LAND中的信息与列CODE_06中的信息相同

我创造了这个,但我不知道,是什么错了,为什么它不起作用


这:

没有任何意义

看起来您试图使用子查询而不是简单的表达式,但是没有
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);