【问题标题】:pgAdmin 4 does not create functions with geometrypgAdmin 4 不使用几何创建函数
【发布时间】:2018-09-06 20:24:35
【问题描述】:

在长期使用 pgAdmin 3 之后,我最近开始使用 pgAdmin 4。

我现在遇到的问题是我无法替换引用geometry 对象的现有函数。我在 Windows 10 上,pgAdmin 4 的当前版本是 2.1。

PL/pgSQL 函数已经存在于数据库中,它是使用 flyway、psql 或 pgAdmin 3 创建的,并且可以正常工作。 PostGIS 扩展已启用。

现在我进入pgAdmin 4并使用和以前一样的登录,选择“脚本”->“创建脚本”的功能,然后点击F5-“运行脚本”来创建它。

我得到的是一个错误:

ERROR:  type "geometry" does not exist
LINE 22:   v_location   geometry;

pgAdmin 3 中的相同操作不会出错。 该函数的search_path设置正确,可以在pgAdmin3和psql中创建。

其实我可以在pgadmin4的查询工具中创建一个dummy函数并编译它。见下文:

set search_path=res_cc_01,public;
create or replace function test() returns text
  LANGUAGE plpgsql VOLATILE SECURITY DEFINER
  COST 100
  set search_path=res_cc_01,public
AS
$BODY$
DECLARE
    v_g geometry := ST_GeometryFromText('POINT(142.279859 -9.561480)',4326);
begin
    return 'xxx'::text;
end;
$BODY$

仅当通过 Scripts->Create Script 然后 F5 ( Execute ) 重新编译时,我得到了错误。 这里有什么问题?

我在网上找不到类似的问题,也找不到手册。但我还没有全部读完。

【问题讨论】:

    标签: postgresql geometry postgis pgadmin-4


    【解决方案1】:

    您肯定缺少当前数据库中的postgis 扩展名。如果你已经在你的服务器中安装了它,只需执行以下命令来创建扩展和缺少的数据类型:

    CREATE EXTENSION postgis;

    如果您的数据库服务器中碰巧没有安装它,您可以找到许多操作系统的安装说明here

    【讨论】:

    • 感谢您的快速答复,但这并不能解决问题。 postgis 扩展和其他已经安装,代码已经在数据库上运行,我只尝试做一个小修复并使用 Scripts->create scritps 使用 PGAdmin4 编译它,就像我在 pgadmin 3 中经常做的那样。编译他改变了PGAdmin 3 正在工作。所以在我看来,这是一个 pgadmin 4 问题,而不是服务器问题。实际上我们在函数的plpgsql代码定义中使用了set search_path = mypath,public,可能这在pgadmin 4中不起作用。
    • 这真的很有趣..如果您将函数代码粘贴到查询工具窗口并尝试执行它会发生什么?我假设你有一个CREATE OR REPLACE FUNCTION 声明。我还使用 pgAdmin 4(虽然不是一个大粉丝)和 postgis,它对我来说很好。
    • 我在主线程中添加了查询工具测试功能。它在那里工作,但不适用于 Create Scripts。
    • 现在我明白你的意思了:我也遇到了同样的错误:ERROR: FEHLER: Typ »geometry« existiert nicht LINE 16: v_g geometry := ST_GeometryFromText('POINT(142.279859 -9... 我会支持你的问题,看看其他人是否知道对我来说似乎是一个错误的答案。如果我发现了什么,我会告诉你的。
    • 服务!我只是看到 pgAdmin4 在你的函数中不能很好地处理这个参数SET search_path='res_cc_01, public'。把它放在一边你可以编译函数..这根本不是一个解决方案,但至少我们知道问题出在哪里。
    【解决方案2】:

    问题是由 pgadmin 4 在使用 Scripts-> Create Script 时显示 plpgsql 代码的方式引起的。 它将不需要的引号添加到 search_path 指令中的路径,使整个 search_path 无效。如果 search_path 无效,编译器将找不到可用的扩展。 我们实际上有一个带有 PGAdmin4 的项目,其中 Scripts->Create Script 出现故障。 在 PgAdmin 3 中,函数中使用的 search_path 指令显示为 alter function 语句,但格式正确。 非常感谢 Jim Jones 对这个问题的宝贵分析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多