Postgis安装:类型“几何”不存在

Posted

技术标签:

【中文标题】Postgis安装:类型“几何”不存在【英文标题】:Postgis installation: type "geometry" does not exist 【发布时间】:2011-10-14 14:19:18 【问题描述】:

我正在尝试使用 Postgis 创建表。我是通过这个page 来做的。但是当我导入 postgis.sql 文件时,我得到了很多错误:

ERROR:  type "geometry" does not exist

有人知道我该如何解决吗?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,但是通过运行以下代码解决了这个问题

CREATE EXTENSION postgis;

详细一点,

    打开pgAdmin 选择(单击)您的数据库 点击栏上的“SQL”图标 运行“创建扩展 postgis;”代码

【讨论】:

谢谢。顺便说一句,如果有人使用“psql”运行此代码,请确保该角色具有“超级用户”属性/权限。 救生员!我以为我已经设置好了,所以我一直认为这是别的东西...... 请注意,这是特定于您正在使用的特定数据库的。它不是安装范围的。 我把 pg_dump 放回去了,也遇到了同样的问题。我的 postgis 扩展将它的数据放入一个自定义的 SCHEME 中,称为postgis。我需要运行以下命令,一切又恢复正常:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;【参考方案2】:

如果加载了 Postgis-Extension,那么您的 SQL 可能由于缺少公共架构的搜索路径而找不到几何类型。

试试

SET search_path = ..., public;

在脚本的第一行。 (将 ... 替换为其他必需的搜索路径)

【讨论】:

【参考方案3】:

您可以从终端执行此操作:

psql mydatabasename -c "CREATE EXTENSION postgis";

【讨论】:

【参考方案4】:

要让 psql 在第一个错误时停止,请使用-v ON_ERROR_STOP=1(即off by default,这就是您看到许多错误的原因)。例如:

psql -U postgres -d postgis -v ON_ERROR_STOP=1 -f postgis.sql

实际错误类似于“无法加载库 X”,这可能因您的情况而异。作为猜测,请在安装 sql 脚本之前尝试此命令:

ldconfig

(您可能需要前缀sudo,具体取决于您的系统)。此命令更新所有系统库的路径,例如 GEOS。

【讨论】:

【参考方案5】:

如果您尝试在另一个架构而不是 public 上使用 postgis 类型,也可能会出现此错误。

如果您使用 postgis 2.3 或更高版本创建自己的架构并遇到此错误,请执行以下操作as stated here:

CREATE SCHEMA IF NOT EXISTS my_schema;
CREATE extension postgis;

UPDATE pg_extension 
  SET extrelocatable = TRUE 
    WHERE extname = 'postgis';

ALTER EXTENSION postgis 
  SET SCHEMA my_schema;

ALTER EXTENSION postgis 
  UPDATE TO "2.5.2next";

ALTER EXTENSION postgis 
  UPDATE TO "2.5.2";

SET search_path TO my_schema;

然后您可以继续使用 postgis 功能。

【讨论】:

【参考方案6】:

您必须在您的数据库上启用扩展。

psql my_database -c "CREATE EXTENSION postgis;"

【讨论】:

【参考方案7】:

您还需要确保您尝试使用 postgis 扩展的用户有权访问设置 postgis 的架构(在我阅读的教程中称为“postgis”)。

我刚刚遇到了这个错误,由于我只授予了新用户对数据库的访问权限,因此问题已得到解决。在我创建的数据库中,我运行:

grant all on schema postgis to USERNAME; 

这解决了这个错误

【讨论】:

只需要USAGE。除非你是认真的,否则不要授予ALL【参考方案8】:

此处的答案可能会解决您的问题,但是如果您已经在数据库上启用了 postgis,则问题可能是您正在尝试将 postgis 表(带有几何列)恢复到您的 postgis 扩展之外的架构中已启用。在 pgAdmin 中,您可以单击 postgis 扩展并查看指定的架构。如果您尝试将具有几何列的表恢复到不同的架构,您可能会收到此错误。

我通过更改我的 postgis 扩展解决了这个问题 - 但是我不确定这是否一定是最好的方法。我所知道的是它允许我恢复表。

【讨论】:

在 Postgis 版本 2.3 之前,您可以将扩展移动到另一个模式,这几次为我解决了这个问题【参考方案9】:

首先确保您已安装(与 pg 版本匹配:psql -V)postgis:

sudo apt install postgis postgresql-9.6-postgis-2.3

就在创建表之前添加:

db.engine.execute('create extension postgis') 
db.create_all()

【讨论】:

这对我有用。我只需将声明稍微更改为CREATE EXTENSION IF NOT EXISTS postgis,这样它就不会在后续启动时失败。【参考方案10】:

或者……

cursor.execute('create extension postgis')

在您的 python 程序中,使用 psycopg2 中的当前光标。

【讨论】:

【参考方案11】:

这已经被回答了,但我想添加一个更全面的答案,解释为什么某些命令有效,在什么情况下使用它们,当然,如何弄清楚你在什么情况下在里面。

首先,您需要检查您的盒子上是否实际安装了 PostGIS。当连接到 postgres 时,例如通过 psql,运行:

SELECT PostGIS_Full_Version();

如果尚未安装,请查找特定于发行版和版本的安装 PostGIS 的说明并进行安装。

假设 PostGIS 已安装,错误通常是由于没有“创建”特定数据库的扩展(不幸的是,这是一种误导性的语言使用,其效果更像是“启用”扩展)特定数据库的扩展。 PostgreSQL 的设置方式,默认情况下,新数据库没有启用任何扩展,您需要为每个数据库启用(“创建”)它们。为此,您需要运行以下命令。

只需要运行一次:

CREATE EXTENSION postgis;

我认为您需要特定数据库的超级用户权限才能运行此命令。

假设 postgres 配置为允许权限,您可以通过运行以下命令从命令行执行此命令:

psql my_database -c "CREATE EXTENSION postgis;"

您可能需要使用-U 标志并指定用户。

但是,在某些情况下,扩展程序可能已经创建并安装在与公共不同的架构下,问题可能是权限之一。这可能会像@mozboz 描述的情况一样出现,如果您创建一个新用户但不授予它访问架构的权限。要检测这种情况,请在数据库中查找一个单独的架构,其中包含一个名为 spatial_ref_sys 的表,因为它是在创建扩展时创建的。

在这种情况下,您可能需要在连接到数据库时运行:

GRANT USAGE ON SCHEMA schema_name TO username;

根据我的经验,这种情况很少见,而且我从来没有找到任何理由以这种方式进行设置。 schema_name 通常是 postgis,但并非总是如此。默认情况下,如果您在此处运行第一个命令,它将在 public 架构下创建扩展。

我认为 USAGE 通常足以满足大多数情况,但如果您希望用户能够实际编辑数据,则可能需要授予更多权限;对我来说,唯一一次出现这种情况是向spatial_ref_system 添加新的投影,但即使这样也很少见,因为默认情况下该表包含最常用的投影。

【讨论】:

【参考方案12】:

我的经验是我试图将 ism 文件加载到与“public”不同的文件中。我在公共以外的另一个模式上初始化了 postgis 扩展。所以那没有用。所以最后我不得不删除扩展,然后公开创建 postgis 扩展。之后我可以将 osm 加载到我的新架构中

Osm 总是在公共场合寻找扩展文件,不管你打算在哪里安装另一个模式中的 osm 文件

【讨论】:

以上是关于Postgis安装:类型“几何”不存在的主要内容,如果未能解决你的问题,请参考以下文章

Postgis 和 Postgresql:类型错误“st_point”不存在

错误:匹配 postgis 自定义模式时,函数 postgis_lib_version() 不存在

PostGIS安装及shp数据导入

在 Apache Spark JDBC DataFrame 中使用 Postgis 几何类型

Liquibase 使用 Postgis“几何”类型创建表

在java中存储PostgreSQL/PostGIS“几何(多多边形)”数据类型