PostgreSQL + Django + South 的第一步

Posted

技术标签:

【中文标题】PostgreSQL + Django + South 的第一步【英文标题】:First steps with PostgreSQL + Django + South 【发布时间】:2012-02-21 01:08:48 【问题描述】:

你好 *** 的人,

过去,我总是使用 sqlite 作为数据库平台在本地开发我的 Django 项目。现在,我想迁移到 PostgreSQL 以利用 GIS 功能,但这种过渡让我非常痛苦。

我已经安装了类似这个post的postgresql,然后按照GeoDjango description创建数据库。

此外,我将模型类替换为

from django.contrib.gis.db import models

并添加

geolocation = models.PointField(_('Geo Location'), 
                geography=True, 
                help_text=_('Geolocation with Longitude and Latitude'))

objects = models.GeoManager()

现在,在深入研究 postgreSQL 领域之前,我想通过 Django Admin 测试模型访问,但遇到了第一个错误。

当我在 Admin 中选择模型(我刚刚按上述修改)时,我收到以下错误:

**InternalError at /admin/remap/project/**
current transaction is aborted, commands ignored until end of transaction block 

此错误与错误的 sql 查询有关,但令我惊讶的是 Django Admin 创建了错误的 sql 语句(被数百万开发人员使用,并且在早期的 sqlite 配置中运行良好)。

当我检查 django sql 语句时,我可以看到 PointField 的条目

"geolocation" geography(POINT,4326) NOT NULL,

但是当我检查 psql \d projects 时,我看不到 PointField 的变化(这应该是导致错误的原因)。由于我使用的是 South,所以我执行了

./manage.py schemamigration projects --initial
./manage.py migrate projects

但我收到了消息

Running migrations for projects:
- Nothing to migrate.
- Loading initial data for projects.

我怎样才能说服南/postgresql 有一些东西要迁移? 您认为从 SQLite 到 PostgreSQL 的转换还有其他问题吗?

感谢您的回答和帮助!

【问题讨论】:

在数据库已经就位的情况下,您应该首先convert an app 使用 south,对模型进行更改,然后运行 ​​schemamigration 以便 south 创建迁移,最后使用 @987654325 应用该迁移@ 命令。从您的问题来看,您更改了模型,然后运行了没有任何冻结模型的架构迁移来比较当前模型,因此它无法检测到任何更改。 【参考方案1】:

一个可能的答案:

你同步数据库了吗?通常当我遇到南方问题时,我只是删除数据库并从头开始运行manage.py syncdb 以确保我的所有列都符合要求。如果您想向南忽略启用迁移的应用程序而只同步数据库到当前版本,您可以使用manage.py syncdb --all

【讨论】:

您好杰里米,谢谢您的回答。我注意到这个问题与 psql 有关。当我想删除特定的项目表“DROP TABLE project”然后我执行“\d project” - 该表仍然存在。难怪 psql 不会随着 GiS 的变化而采取表变化。知道如何删除表格,是否有强制删除? 如果您的问题与原始问题有出入,您应该编辑它以解释当前问题,或者如果它与原来的问题大不相同,则考虑打开一个新问题。我使用Navicat 而不是命令行,所以在这方面我无法提出任何建议。但是,您所描述的问题听起来您可能正在编辑与 Django 正在使用的数据库不同的数据库副本。

以上是关于PostgreSQL + Django + South 的第一步的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Django 更喜欢 Postgresql? [复制]

PostgreSQL 和 Django 的权限被拒绝错误。授予 PostgreSQL 用户管理员权限

PostgreSQL + Django + South 的第一步

使用 Django + PostgreSQL 进行快速搜索

将 postgresql 索引转换为 Django 迁移

Django,Ajax 长轮询,Postgresql:空闲事务