如何在Postgres上修复“ SQLSTATE [42883]:未定义的函数:7错误”?

时间:2019-05-31 16:30:28

标签: sql postgresql triggers

我有一个函数触发器,该触发器将几何形状从另一列转换为json的列输入。直到最近,当我开始出现此错误时,它一直没有问题:'SQLSTATE [42883]:未定义的函数:7错误...没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。'

这是我的函数的脚本:

CREATE OR REPLACE FUNCTION update_formulario_ep()
RETURNS trigger AS $teste_trigger$
BEGIN
UPDATE formulario.formulario_ep
SET geom = (SELECT ST_GeomFromText( ST_AsText( CAST(ST_GeomFromGeoJSON(geom_js) AS TEXT) ), 4326 ));
RETURN NEW;
END;
$teste_trigger$ LANGUAGE plpgsql;

这是触发器的脚本:

CREATE TRIGGER update_allrows_trigger_ep
AFTER INSERT ON formulario.formulario_ep
FOR EACH ROW
EXECUTE PROCEDURE update_formulario_ep();

1 个答案:

答案 0 :(得分:0)

您需要确保执行插入操作的用户的search_path中提供了安装PostGIS的架构,如本post所述。

也可以通过将其设为BEFORE触发器来简化触发器,只需设置NEW.geom值即可:

CREATE OR REPLACE FUNCTION update_formulario_ep()
RETURNS trigger AS $teste_trigger$
 BEGIN
   NEW.geom = ST_SetSRID(ST_GeomFromGeoJSON(NEW.geom_js),4326);
   RETURN NEW;
  END;
$teste_trigger$ LANGUAGE plpgsql;


CREATE TRIGGER update_allrows_trigger_ep
BEFORE INSERT ON formulario.formulario_ep
FOR EACH ROW
EXECUTE PROCEDURE update_formulario_ep();