2015-06-26 20 views
5

Tôi đang làm việc với cơ sở dữ liệu postgres và phần mở rộng postgis. Bây giờ, sau khi nâng cấp lên Django 1.8, tôi nhận được lỗi này khi chạy manage.py migrate:Lỗi di chuyển Postgis sau khi nâng cấp lên 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 

phiên bản

Tôi đang sử dụng Postgres.app trên 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

Trả lời

3

Ok tôi đã giải quyết.

Lần đầu tiên tôi nâng cấp postgres và postgis bằng cách thay thế Postgres.app bằng gói mới nhất và nâng cấp gói brew. Sau này, tôi nhận được lỗi sau:

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 

Sau đó, tôi thực hiện một "Upgrade cứng" như đã giải thích ở đây http://postgis.net/docs/manual-2.1/postgis_installation.html#upgrading

Tất cả các bước

  1. pg_dump -U $PGUSER -Fc -b -v -f "your_db.backup" your_db
  2. (bao gồm nâng cấp cứng.)
  3. psql -U $PGUSER -d postgres -c "DROP DATABASE your_db;"
  4. brew uninstall postgresql93 && brew install postgresql hoặc brew upgrade postgresql
  5. brew uninstall postgis15 && brew install postgis hoặc brew upgrade postgis
  6. Thay Postgres.app với mới nhất một
  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

Tôi có cùng một vấn đề khi di chuyển để django 1.9. Giải pháp này làm việc cho tôi. Tuy nhiên tôi không phải làm các bước từ 3 đến 6. –

Các vấn đề liên quan