loaddata 명령을 사용하여 json 덤프 된 데이터 (온라인 db에서)로 로컬 postgres 데이터베이스를로드하려고합니다. 하지만 기본 키가있는 DB에 이미 일부 데이터가 있으므로 "무결성 오류"와 함께 실패합니다. 그런 다음 데이터베이스를 플러시하여 syncdb 바로 다음에 상태를 가져 오려고했습니다. 그러나 그것은 나에게 다음과 같은 메시지를 보내고 실패합니다.Django에서 Postgres DB를 플러시 할 수 없음
You have requested a flush of the database.
This will IRREVERSIBLY DESTROY all data currently in the 'app' database,
and return each table to the state it was in after syncdb.
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
Error: Database app couldn't be flushed. Possible reasons:
* The database isn't running or isn't configured correctly.
* At least one of the expected database tables doesn't exist.
* The SQL was invalid.
Hint: Look at the output of 'django-admin.py sqlflush'. That's the SQL this command wasn't able to run.
The full error: cannot truncate a table referenced in a foreign key constraint
DETAIL: Table "taskapp_taskrequest" references "taskapp_task".
HINT: Truncate table "taskapp_taskrequest" at the same time, or use TRUNCATE ... CASCADE.
이것은 내가 여러 모델과 그들 가운데 많은 외래 키 관계와 데이터베이스가 sqlflush 명령
BEGIN;
TRUNCATE "auth_permission", "auth_group", "tagging_taggeditem", "auth_user_user_permissions", "taskapp_task_reviewers", "taskapp_task", "django_site", "profile_profile", "django_content_type", "profile_notification", "django_session", "auth_user_groups", "taskapp_pyntrequest", "profile_rolerequest", "tagging_tag", "taskapp_textbook_chapters", "registration_registrationprofile", "taskapp_textbook", "django_admin_log", "auth_group_permissions", "taskapp_task_selected_users", "taskapp_taskcomment", "south_migrationhistory", "taskapp_task_claimed_users", "taskapp_taskclaim", "taskapp_workreport", "auth_message", "taskapp_reportcomment", "auth_user";
SELECT setval(pg_get_serial_sequence('"registration_registrationprofile"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"tagging_tag"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"tagging_taggeditem"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"south_migrationhistory"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"auth_permission"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"auth_group"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"auth_user"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"auth_message"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"django_content_type"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"django_site"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"django_admin_log"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"profile_profile"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"profile_notification"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"profile_rolerequest"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"taskapp_task"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"taskapp_taskcomment"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"taskapp_taskclaim"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"taskapp_workreport"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"taskapp_reportcomment"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"taskapp_pyntrequest"','id'), 1, false);
SELECT setval(pg_get_serial_sequence('"taskapp_textbook"','id'), 1, false);
COMMIT;
에 해당하는 출력됩니다. 인터넷을 통해 읽은 것으로부터, Truncate가 의존하는 테이블을 삭제해야한다는 것을 이해합니다. 나는 그것을 dbshell에서 사용하기위한 정확한 구문을 이해할 수 없다.
나는 또한 sudo user로 PostgreSQL의 쉘에 액세스하고
DROP DATABASE DBNAME
명령을 사용하여 데이터베이스를 제거하기 위해 노력했다. 그러나 데이터베이스는 지속됩니다.
편집 :
감사의 내가 데이터베이스를 제거 할 수 있었고, 새로운 하나를 만들어 의견을 stevejalim합니다. syncdb 명령을 다시 실행하고 db를 다시 작성했습니다. 하지만 loaddata 명령을 사용하여 db를로드하려고 시도하면 오류가 발생합니다.
IntegrityError: duplicate key value violates unique constraint
이 문제에 대한 도움을 주시면 감사하겠습니다.
바보 같지만 DB 드롭 명령 이후에 세미콜론을 사용 했습니까? 'DROP DATABASE DBNAME; ' –
나쁘다. 나는 항상 잘못된 길로 가고 있다고 생각했다. – primpap
'truncate'는 테이블을 삭제하지 않습니다. 모든 행만 삭제합니다. –