2015-06-26 3 views
5

Я работаю с базой данных postgres и расширением postgis. Теперь, после обновления до версии Django 1.8, я получаю эту ошибку при запуске manage.py migrate:Ошибка миграции Postgis после обновления до Django 1.8

Traceback (most recent call last): 
    File "./manage.py", line 13, in <module> 
    execute_from_command_line(sys.argv) 
    File "/my-project/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
    utility.execute() 
    File "/my-project/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/my-project/env/lib/python2.7/site-packages/django/core/management/base.py", line 390, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/my-project/env/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute 
    output = self.handle(*args, **options) 
    File "/my-project/env/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 91, in handle 
    connection.prepare_database() 
    File "/my-project/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/postgis/base.py", line 39, in prepare_database 
    cursor.execute("CREATE EXTENSION IF NOT EXISTS postgis") 
    File "/my-project/env/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/my-project/env/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/my-project/env/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/my-project/env/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute 
    return self.cursor.execute(sql) 
django.db.utils.ProgrammingError: type "spheroid" already exists 

Версии

Я использую Postgres.app на OS X

  • Psql (9.3. 4)
  • SELECT PostGIS_version(); postgis_version 2.1 USE_GEOS=1 USE_PROJ=1USE_STATS=1
  • Django 1.8.2

ответ

3

Хорошо, я решил.

Сначала я обновил postgres и postgis с заменой Postgres.app с новейшей версией и обновлением пакетов brew. После этого я получил следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "./manage.py", line 13, in <module> 
    execute_from_command_line(sys.argv) 
    File "/my-project/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
    utility.execute() 
    File "/my-project/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/my-project/env/lib/python2.7/site-packages/django/core/management/base.py", line 390, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/my-project/env/lib/python2.7/site-packages/django/core/management/base.py", line 441, in execute 
    output = self.handle(*args, **options) 
    File "/my-project/env/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 91, in handle 
    connection.prepare_database() 
    File "/my-project/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/postgis/base.py", line 39, in prepare_database 
    cursor.execute("CREATE EXTENSION IF NOT EXISTS postgis") 
    File "/my-project/env/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/my-project/env/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/my-project/env/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/my-project/env/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute 
    return self.cursor.execute(sql) 
django.db.utils.InternalError: PostGIS is already installed in schema 'public', uninstall it first 

Тогда я выполнил "Hard Upgrade", как описано здесь http://postgis.net/docs/manual-2.1/postgis_installation.html#upgrading

Все шаги

  1. pg_dump -U $PGUSER -Fc -b -v -f "your_db.backup" your_db
  2. (в т.ч. Hard Upgrade.)
  3. psql -U $PGUSER -d postgres -c "DROP DATABASE your_db;"
  4. brew uninstall postgresql93 && brew install postgresql или brew upgrade postgresql
  5. brew uninstall postgis15 && brew install postgis или brew upgrade postgis
  6. Заменить Postgres.app новейшим одним
  7. pip uninstall psycopg2 && pip install psycopg2
  8. psql -U $PGUSER -d postgres -c "CREATE DATABASE your_db;"
  9. psql -U $PGUSER -d your_db -c "CREATE EXTENSION postgis;"
  10. /usr/local/share/postgis/postgis_restore.pl your_db.backup | psql -U $PGUSER your_db 2> errors.txt
+0

я получил тот же вопрос при движении Джанго 1.9. Это решение сработало для меня. Однако мне не нужно было делать шаги с 3 по 6. –

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

  • Нет связанных вопросов^_^