pgAdmin 4不会创建几何

时间:2018-03-28 08:29:44

标签: postgresql geometry postgis pgadmin-4

我最近在长时间使用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的查询工具中创建一个虚函数并编译它。见下文:

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重新编译时 - >创建脚本然后F5(执行)才会出错。 这有什么问题?

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

2 个答案:

答案 0 :(得分:2)

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

CREATE EXTENSION postgis;

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

答案 1 :(得分:2)

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