【问题标题】:How to fix 'SQLSTATE[42883]: Undefined function: 7 ERROR' on postgres?如何修复 postgres 上的“SQLSTATE [42883]:未定义函数:7 错误”?
【发布时间】:2019-05-31 16:30:28
【问题描述】:

我有一个函数触发器,它为一列提供几何图形,该几何图形是从另一列用 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();

【问题讨论】:

  • geom_js 来自哪里?可以通过使用 BEFORE 触发器并编写 NEW.geom = ST_SetSRID(ST_GeomFromGeoJSON(NEW.geom_js),4326); 而不是整个更新语句来简化它
  • 否则,如果输入geom_js没问题,说明安装了PostGIS的schema(如果安装了...)不在用户运行该函数的搜索路径中。 stackoverflow.com/questions/48407622/…
  • geom_js 与 Web 表单中的其他字段一起出现。
  • 我会用这个BEFORE trigger and writing NEW.geom = ST_SetSRID(ST_GeomFromGeoJSON(NEW.geom_js),4326); 替换SET geom =...
  • 好吧,我告诉你什么。你的问题让我找到了正确的地方,我有类似的错误,结果是一个触发器,我什至不知道我们的数据库中有触发器!所以谢谢!

标签: sql postgresql triggers


【解决方案1】:

您需要确保安装 PostGIS 的架构在执行插入操作的用户的 search_path 中可用,详见 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();

【讨论】:

  • 谢谢,但问题出在我用来插入数据库的用户上。
猜你喜欢
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多