带有 postgis 的 geodjango 不起作用

Posted

技术标签:

【中文标题】带有 postgis 的 geodjango 不起作用【英文标题】:geodjango with postgis would not work 【发布时间】:2012-08-17 08:28:28 【问题描述】:

我是geodjango的新手,我有以下设置:

DATABASES = 
    "default" : 
        'ENGINE': 'django.contrib.gis.db.backends.postgis', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'dbname',                      # Or path to database file if using sqlite3.
        'USER': 'django',                      # Not used with sqlite3.
        'PASSWORD': 'somepass',                  # Not used with sqlite3.
        'HOST': '127.0.0.1',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    


INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.gis',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'django.contrib.gis',
    "app.core",
)

我已经使用以下命令创建了数据库:

postgres@rewitaqia:~$ createdb -U postgres -T template_postgis -O django dbname

但是当我尝试同步数据库时,它说:

django.core.exceptions.ImproperlyConfigured: Cannot determine PostGIS version for database "dbname". GeoDjango requires at least PostGIS version 1.3. Was the database created from a spatial database template?

当我在 psql 中尝试这个时,似乎 db 并不是真正从 postgis 模板创建的:

db_name=# select postgis_lib_version();
ERROR:  no existe la función postgis_lib_version()
ŘÁDKA 1: select postgis_lib_version();
                ^
DOPORUČENÍ:  Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.

感谢您的阅读。

【问题讨论】:

你确定你连接到同一个数据库你createdb'd 当你用 psql 测试时?可能有两种不同的大小写,或一个有下划线,一个没有下划线?与psql 连接并运行\l 你的数据库有'geometry_columns'和'spatial_ref_sys'表吗? @RickyA:不,似乎没有 @CraigRinger 是的,他们是一样的...... 【参考方案1】:

维斯金,

第一次设置 PostGIS 时,我和你有很多相同的问题,所以我创建了一篇详细介绍 PostGIS 设置的文章。很抱歉插入我自己的文章,但我创建它是为了帮助记录设置过程。 http://www.chicagodjango.com/blog/geo-django-quickstart/

看你上面的问题,很难确切地说出问题是什么。但是,您可能会检查会产生列出的 PostGIS 错误的事情:

是否安装了所有 apt 系统依赖项?请参阅文章中的第 1 步。 当您创建 postgis_template 架构时,是否运行了创建地理空间数据库对象的命令(参见附加链接的第 2 步)? 是否安装了相当新的 PostGIS 版本?查看最低要求:https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#spatial-database

无论如何,希望这会有所帮助。乔

【讨论】:

那是一篇非常好的文章。谢谢! 请帮我解决这个问题,我对这个问题有相同的设置,但是当我删除'PASSWORD': 'somepass', 时出现错误django.db.utils.OperationalError: FATAL: password authentication failed for user "apple" 我收到另一个错误django.db.utils.OperationalError: fe_sendauth: no password supplied -另外,如何获取当前密码?

以上是关于带有 postgis 的 geodjango 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GeoDjango/PostGIS 满足“enforce_srid_coordinate”约束?

为啥它在运行迁移时抛出`GeoDjango Postgis 要求不满足得到错误?

Postgis / Geodjango:无法确定数据库的 PostGIS 版本

在 PostGIS 数据库中使用带有 spatial_template 的非空间模型

geodjango(postgis)中两个3D点之间的距离

Heroku 上的 postgis Geodjango 出错