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

时间:2011-07-27 20:01:23

标签: postgresql geometry postgis

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

ERROR:  type "geometry" does not exist

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

10 个答案:

答案 0 :(得分:146)

我遇到了同样的问题,但通过运行以下代码

解决了这个问题
CREATE EXTENSION postgis;

详细说明,

  1. 打开pgAdmin
  2. 选择(点击)您的数据库
  3. 点击栏上的“SQL”图标
  4. 运行“CREATE EXTENSION postgis;”代码

答案 1 :(得分:19)

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

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

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

ldconfig

(根据您的系统,您可能需要以sudo为前缀)。此命令更新所有系统库的路径,例如GEOS。

答案 2 :(得分:18)

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

尝试

SET search_path = ...,public;

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

答案 3 :(得分:17)

您可以从终端进行:

psql mydatabasename -c "CREATE EXTENSION postgis";

答案 4 :(得分:3)

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

psql my_database -c "CREATE EXTENSION postgis;"

答案 5 :(得分:2)

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

我只是遇到了这个错误,并且因为我只授予了新用户访问数据库的权限而得以解决。在创建的数据库中,我运行:

grant all on schema postgis to USERNAME; 

这解决了这个错误

答案 6 :(得分:1)

这里的答案可以解决您的问题,但是如果您已经在数据库上启用了postgis,则问题可能是您尝试将postgis表(带有几何列)还原到除postgis扩展名之外的模式中已启用。在pgAdmin中,您可以单击postgis扩展名并查看指定的架构。如果您尝试将具有几何列的表还原到其他架构中,则可能会出现此错误。

我通过改变我的postgis扩展来解决这个问题 - 但是我不确定这是否是最好的方法。我所知道的是它让我恢复了桌子。

答案 7 :(得分:0)

或者...

cursor.execute('create extension postgis')
使用psycopg2中的当前光标在你的python程序中

答案 8 :(得分:0)

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

@SerializedName("message")
public String message;
@SerializedName("code")
public String code;

在创建表之前添加:

sudo apt install postgis postgresql-9.6-postgis-2.3

答案 9 :(得分:0)

如果您尝试在另一种模式而不是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功能。