2017-08-24 51 views
0

我遷移到sqlite3 postgresql數據庫,我試圖遷移,但它會一直拋出異常我也使用DRF。Django當我嘗試遷移遷移到posgresql它會拋出一個異常psycopg2.ProgrammingError

這裏是我的輸出:

Operations to perform: 
    Apply all migrations: admin, auth, authtoken, contenttypes, sessions 
Running migrations: 
    Applying contenttypes.0002_remove_content_type_name...Traceback (most recent call last): 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
psycopg2.ProgrammingError: column "name" of relation "django_content_type" does not exist 

以上的例外是以下異常的直接原因:

Traceback (most recent call last): 
    File "./manage.py", line 22, in <module> 
    execute_from_command_line(sys.argv) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line 
    utility.execute() 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 355, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute 
    output = self.handle(*args, **options) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 204, in handle 
    fake_initial=fake_initial, 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/migrations/executor.py", line 115, in migrate 
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/migrations/executor.py", line 145, in _migrate_all_forwards 
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration 
    state = migration.apply(state, schema_editor) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/migrations/migration.py", line 129, in apply 
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/migrations/operations/fields.py", line 216, in database_forwards 
    schema_editor.alter_field(from_model, from_field, to_field) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 515, in alter_field 
    old_db_params, new_db_params, strict) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/backends/postgresql/schema.py", line 112, in _alter_field 
    new_db_params, strict, 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 684, in _alter_field 
    params, 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 120, in execute 
    cursor.execute(sql, params) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 80, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "/home/dawid/django/venv/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
django.db.utils.ProgrammingError: column "name" of relation "django_content_type" does not exist 

Bucketlist模型具有下面的代碼:

class Bucketlist(models.Model): 
    """This class represents the bucketlist model.""" 
    name = models.CharField(max_length=255, blank=False, unique=True) 
    owner = models.ForeignKey(
     'auth.User', 
     related_name='bucketlists', 
     on_delete=models.CASCADE) 
    date_created = models.DateTimeField(auto_now_add=True) 
    date_modified = models.DateTimeField(auto_now=True) 

    def __str__(self): 
     """Return a human readable representation of the model instance.""" 
     return "{}".format(self.name) 

# This receiver handles token creation when a new user is created. 
@receiver(post_save, sender=User)`enter code here` 
def create_auth_token(sender, instance=None, created=False, **kwargs): 
    if created: 
     Token.objects.create(user=instance) 
+0

我的輸出數據忘記*^* –

+0

當你改變了數據庫並導入'sqlite'數據?在此更改之前採取了哪些步驟,例如1.更新了設置,2.數據庫轉儲sqlite等 – tdsymonds

回答

0

你可以嘗試這些解決方案,

  1. 要麼轉儲/刷新數據庫,如果你能負擔得起。然後嘗試遷移到PostgreSQL。

  2. 遵循以下步驟:

    • 轉儲數據庫到JSON。

      ./manage.py dumpdata --natural-primary --natural-foreign > data.json 
      
    • 變更爲默認數據庫中settings.py即切換到PostgreSQL設置。

    • 同步數據庫。

      ./manage.py migrate 
      
    • 加載您存儲在data.json

      ./manage.py loaddata data.json