Postgis安装:类型“ geometry”不存在


95

我正在尝试使用Postgis创建表。我在这个页面上做。但是,当我导入postgis.sql文件时,出现很多错误:

ERROR:  type "geometry" does not exist

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

Answers:


199

我有同样的问题,但是通过运行以下代码已解决

CREATE EXTENSION postgis;

详细地,

  1. 打开pgAdmin
  2. 选择(单击)您的数据库
  3. 点击栏上的“ SQL”图标
  4. 运行“创建扩展帖子”;码

3
谢谢。顺便说一句,如果有人使用“ psql”来运行此代码,请确保该角色具有“超级用户”属性/特权。

2
节省生命!我以为我已经设置好了,所以我一直以为是其他东西……
James111 2016年

2
请注意,这特定于您正在使用的特定数据库。它不是安装范围的。
愚蠢的人

1
我放回pg_dump,并遇到了同样的问题。我的postgis扩展名将其数据放入名为的自定义SCHEME中postgis。我需要运行以下命令,一切恢复正常:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
doekman

23

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

尝试

SET search_path = ...,公开;

在您的scsript的第一行中。(用其他必需的搜索路径替换...)



18

要使psql停止出现第一个错误,请使用-v ON_ERROR_STOP=1默认情况下处于关闭状态,这就是为什么您看到许多错误的原因)。例如:

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

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

ldconfig

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



5

如果您尝试在其他架构而不是上使用postgis类型,也可能会发生此错误public

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

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功能。


3

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

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

grant all on schema postgis to USERNAME; 

这解决了这个错误


1

此处的答案可能会解决您的问题,但是,如果您已经在数据库上启用了postgis,则问题可能是您试图将postgis表(带有geometry列)还原到架构中而不是启用postgis扩展名的位置。在pgAdmin中,您可以单击postgis扩展名,然后查看指定了哪个模式。如果您尝试将具有“几何”列的表还原到其他架构,则可能会出现此错误。

我通过更改我的postgis扩展名解决了此问题-但是我不确定这是否一定是最好的方法。我所知道的是,它使我可以还原表。


直到PostGIS的2.3版本,你可以扩展移动到其解决了这个问题,我几次另一个模式
丹尼尔TULP

0

要么...

cursor.execute('create extension postgis')

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


0

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

sudo apt install postgis postgresql-9.6-postgis-2.3

在创建表之前添加:

db.engine.execute('create extension postgis') 
db.create_all()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.