2017-12-25 29 views
0

Django 프로젝트에서 표준 sqlite 데이터베이스에서 postgresql로 변경하려고합니다. 권한을 가진 데이터베이스와 사용자를 생성표준 sqlite에서 postgres 데이터베이스로 변경

  1. 설치된 PostgreSQL을
  2. 을 settings.py의 데이터베이스 설정 변경이
  3. 에 기록 :

    DATABASES = { 
        'default': { 
         'ENGINE': 'django.db.backends.postgresql', 
         'NAME': 'workout', 
         'USER': 'admin', 
         'PASSWORD': 'admin', 
         'HOST': 'localhost', 
         'PORT': '5432', 
        } 
    } 
    
  4. 여기에 지금까지 한 일이다
내가 마이그레이션 할 때

그런 다음,이 (긴 오류 추적에 대한 경고) 발생 :

,
(workout) Sahands-MBP:workout sahandzarrinkoub$ python manage.py migrate 
Operations to perform: 
    Apply all migrations: admin, auth, contenttypes, sessions, workoutcal 
Running migrations: 
    Applying contenttypes.0001_initial... OK 
    Applying contenttypes.0002_remove_content_type_name... OK 
    Applying auth.0001_initial... OK 
    Applying auth.0002_alter_permission_name_max_length... OK 
    Applying auth.0003_alter_user_email_max_length... OK 
    Applying auth.0004_alter_user_username_opts... OK 
    Applying auth.0005_alter_user_last_login_null... OK 
    Applying auth.0006_require_contenttypes_0002... OK 
    Applying auth.0007_alter_validators_add_error_messages... OK 
    Applying auth.0008_alter_user_username_max_length... OK 
    Applying workoutcal.0001_initial... OK 
    Applying admin.0001_initial... OK 
    Applying admin.0002_logentry_remove_auto_add... OK 
    Applying sessions.0001_initial... OK 
    Applying workoutcal.0002_auto_20171215_1102... OK 
    Applying workoutcal.0003_auto_20171215_1153...Traceback (most recent call last): 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
psycopg2.ProgrammingError: multiple default values specified for column "id" of table "workoutcal_user" 


The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "manage.py", line 22, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line 
    utility.execute() 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute 
    output = self.handle(*args, **options) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 204, in handle 
    fake_initial=fake_initial, 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/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 "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/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 "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration 
    state = migration.apply(state, schema_editor) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/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 "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/migrations/operations/fields.py", line 87, in database_forwards 
    field, 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 429, in add_field 
    self.execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 120, in execute 
    cursor.execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 80, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
django.db.utils.ProgrammingError: multiple default values specified for column "id" of table "workoutcal_user" 

(workout) Sahands-MBP:workout sahandzarrinkoub$ python manage.py migrate 
Operations to perform: 
    Apply all migrations: admin, auth, contenttypes, sessions, workoutcal 
Running migrations: 
    Applying workoutcal.0003_auto_20171215_1153...Traceback (most recent call last): 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
psycopg2.ProgrammingError: multiple default values specified for column "id" of table "workoutcal_user" 


The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "manage.py", line 22, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line 
    utility.execute() 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute 
    output = self.handle(*args, **options) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 204, in handle 
    fake_initial=fake_initial, 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/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 "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/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 "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration 
    state = migration.apply(state, schema_editor) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/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 "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/migrations/operations/fields.py", line 87, in database_forwards 
    field, 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 429, in add_field 
    self.execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 120, in execute 
    cursor.execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 80, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
django.db.utils.ProgrammingError: multiple default values specified for column "id" of table "workoutcal_user" 

(workout) Sahands-MBP:workout sahandzarrinkoub$ python manage.py migrate 
Operations to perform: 
    Apply all migrations: admin, auth, contenttypes, sessions, workoutcal 
Running migrations: 
    Applying workoutcal.0003_auto_20171215_1153...Traceback (most recent call last): 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
psycopg2.ProgrammingError: multiple default values specified for column "id" of table "workoutcal_user" 


The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "manage.py", line 22, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line 
    utility.execute() 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute 
    output = self.handle(*args, **options) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 204, in handle 
    fake_initial=fake_initial, 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/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 "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/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 "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/migrations/executor.py", line 244, in apply_migration 
    state = migration.apply(state, schema_editor) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/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 "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/migrations/operations/fields.py", line 87, in database_forwards 
    field, 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 429, in add_field 
    self.execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/base/schema.py", line 120, in execute 
    cursor.execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 80, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
django.db.utils.ProgrammingError: multiple default values specified for column "id" of table "workoutcal_user" 

그래서 workoutcal_user에 어떤 종류의 오류가있는 것 같습니다. 나는 테이블 이름을 장고 방법을 잘 모르겠어요,하지만 난 workoutcal/models.py에서 정의한 유일한 모델이 하나입니다

class User(AbstractUser): 
    REQUIRED_FIELDS = [] 
    USERNAME_FIELD = 'email' 
    email = models.EmailField(
     _('email address'), 
     max_length=150, 
     unique=True, 
     help_text=_('Required. 150 characters or fewer. Must be a valid email address.'), 
     error_messages={ 
      'unique':_("A user with that email address already exists."), 
     }, 
    ) 

나는이 추측하고있어이 문제를 일으키는 모델입니다. 제 질문은 분명히, 왜죠? 이 모델의 id 필드에 여러 개의 기본값이 지정되었다는 것은 무엇을 의미합니까? 그리고 어떻게 그들을 단 하나만 만들 수 있습니까?

편집 :

다니엘 Roseman는 실패한 마이그레이션 0003_auto_20171215_1153.py 요청으로 :

# -*- coding: utf-8 -*- 
# Generated by Django 1.11.5 on 2017-12-15 11:53 
from __future__ import unicode_literals 

from django.db import migrations, models 


class Migration(migrations.Migration): 

    dependencies = [ 
     ('workoutcal', '0002_auto_20171215_1102'), 
    ] 

    operations = [ 
     migrations.AddField(
      model_name='user', 
      name='id', 
      field=models.AutoField(auto_created=True, default=1, primary_key=True, serialize=False, verbose_name='ID'), 
      preserve_default=False, 
     ), 
     migrations.AlterField(
      model_name='user', 
      name='email', 
      field=models.EmailField(error_messages={'unique': 'A user with that email address already exists.'}, help_text='Required. 150 characters of fewer. Must be a valid email address.', max_length=150, unique=True, verbose_name='email address'), 
     ), 
    ] 

편집 2 : 나는 세자르의 지시를 따라

합니다. 마지막 단계에 도달하여 마이그레이션을 시도하면이 오류가 발생합니다.

(workout) Sahands-MBP:workout sahandzarrinkoub$ python manage.py migrate workoutcal 
Traceback (most recent call last): 
    File "manage.py", line 22, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line 
    utility.execute() 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute 
    output = self.handle(*args, **options) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 86, in handle 
    executor.loader.check_consistent_history(connection) 
    File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/migrations/loader.py", line 298, in check_consistent_history 
    connection.alias, 
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency workoutcal.0001_initial on database 'default'. 

이 다른 마이그레이션은 무엇입니까? 마이그레이션 기록을 완전히 지우려면 어떻게해야합니까?

EDIT 3 : DROP TABLE 'tablename' CASCADE;으로 데이터베이스의 모든 테이블을 삭제하고 makemigrationsmigrate을 다시 실행하고 workoutcal/migrations의 모든 파일을 제거한 후에도 효과가있었습니다.

+0

이 변경되었습니다. 같은 문제가 남아 있습니다. – Sahand

+0

모델에게'workoutcal_user'을 표시하십시오 –

+0

그것은 이미 의문입니다. 나는 그것이 될 수있는 다른 어떤 모델도 생각할 수 없다. 그것이 내가 정의한 유일한 모델이다. – Sahand

답변

3

문제는 다음 줄에 : 그것은 기본 키와 같이

field=models.AutoField(auto_created=True, default=1, primary_key=True, serialize=False, verbose_name='ID'),

id 필드가 고유해야합니다. 즉, 많은 항목에서 반복되는 기본값을 가질 수 없습니다.

나는 빠르고 더러운 해결책을 제안합니다. PosgreSQL 명령 줄로 직접 이동하십시오.

DELETE FROM django_migrations WHERE app = 'workoutcal'; 

workoutcal 디렉토리 migrations의 내용을 삭제합니다 :

python manage.py makemigrations workoutcal 

:

rm -rf workoutcal/migrations/* 

그런 다음 새로운 마이그레이션을 생성하는 응용 프로그램 workoutcal의 테이블 django_migrations에있는 모든 항목을 삭제 이렇게하면 새로운 초기 마이그레이션이 만들어집니다. 그 후 명령 :

python manage.py migrate workoutcal 

은 문제없이 데이터베이스를 채워야합니다.

편집 :

admin.0001_initialworkoutcal.0001_initial에 따라 마이그레이션. 나는이 의존성을 설명 할 수 없다. 당신은 admin의 마이그레이션을 되돌릴 장고 명령 줄 도구를 사용할 수 있습니다

python manage.py migrate admin zero 

을 옵션 zero 사용하면 모든 마이그레이션을 되돌릴 초기 마이그레이션이 실행되기 전에 상태를 설정하기 위해 장고 말한다. zero 대신 마이그레이션 번호를 지정할 수 있습니다. 그러나 특정 상황에서는 zero을 사용하여 초기 상태로 되돌아 가야합니다. 그 후

workoutcaladmin에 대한 그 후 마이그레이션을 실행

python manage.py migrate workoutcal 
python manage.py migrate admin 
+0

@cezar 감사합니다. 불행히도 솔루션을 사용해 볼 때 오류가 발생했습니다. EDIT 2를보실 수 있습니까? – Sahand