2012-01-28 6 views
1

Привет StackOverflow людей,Первые шаги с PostgreSQL + Django + Южной

В прошлом, я всегда разработал свои проекты Django локально с SQLite в качестве платформы базы данных. Теперь я хотел перейти в PostgreSQL, чтобы воспользоваться функциями GIS, но переход дает мне огромное горе.

Я установил postgresql, аналогичный этому post, а затем выполнил 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).

Когда я проверяю заявление Джанго SQL, я могу увидеть запись для PointField

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

, но когда я проверяю PSQL \ D проектов, я не могу видеть изменения в PointField (это это то, что должно вызывать ошибку). Так как я использую Юг, я выполнил

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

, но я получаю сообщение

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

Как я могу убедить юг/PostgreSQL, что есть что-то мигрировать? Вы видите какие-либо другие проблемы с формой перехода SQLite на PostgreSQL?

Благодарим за ответ & help!

+0

С базой данных, которая уже установлена, вы должны сначала [конвертировать приложение] (http://south.aeracode.org). /docs/convertinganapp.html), чтобы использовать юг, внести изменения в модели, а затем запустить ['schemamigration'] (http://south.aeracode.org/docs/commands.html#schemamigration), чтобы юг создавал миграцию и, наконец, примените эту миграцию с помощью команды '' migrate' '(http://south.aeracode.org/docs/commands.html#migrate). Судя по вашему вопросу, вы изменили модель, а затем запустили схему, у которой не было замороженной модели, чтобы сравнить текущие, чтобы она не обнаружила никаких изменений. –

ответ

2

A Возможный ответ:

Был ли вы syncdb? Часто, когда у меня возникают проблемы с югом, я просто удаляю базу данных и запускаю manage.py syncdb с нуля, чтобы убедиться, что все мои столбцы находятся в очереди. Если вы хотите, чтобы юг игнорировал приложения с поддержкой миграции и только синхронизировал их до текущей версии, вы можете использовать manage.py syncdb --all

+0

Привет, Джереми, Спасибо за ваш ответ.Я заметил, что проблема должна что-то сделать с psql. Когда я хочу отбросить конкретную таблицу проекта «Проект DROP TABLE», а затем я запускаю «\ d project» - таблица все еще существует. Неудивительно, что psql не принимает изменения таблицы с изменениями GiS. Любая идея, как я мог удалить таблицу, может быть, вынужденное падение? – neurix

+0

Если ваш вопрос отклонился от исходного вопроса, вы должны отредактировать его, чтобы объяснить текущую проблему, или рассмотреть возможность открытия нового вопроса, если он резко отличается. Я использую [Navicat] (http://www.navicat.com/), а не в командной строке, поэтому я не могу предложить ничего в этом отношении. Однако проблема, которую вы описываете, звучит так, будто вы можете редактировать другую копию базы данных, чем тот, который использует Django. –

Смежные вопросы