Django: loaddata не работает

Я создал приспособление:

python manage.py dumpdata --all > ./mydump.json

Я опустошил все свои базы данных, используя:

python manage.py sqlflush | psql mydatabase -U mydbuser

Но когда я пытаюсь использовать loaddata:

python manage.py loaddata ./mydump.json

Я получаю эту ошибку:

IntegrityError: Could not load tastypie.ApiKey(pk=1): duplicate key 
value violates unique constraint "tastypie_apikey_user_id_key" 
DETAIL:  Key (user_id)=(2) already exists.

У меня есть эта проблема на производстве, и у меня нет идей. У кого-то была похожая проблема?

2 ответа

Решение

Решение Джеффа Шеффилда является правильным, но теперь я обнаружил, что такое решение, как django-dbbackup, безусловно, является наиболее общим и простым способом сделать это с любой базой данных.

python manage.py dbbackup

Пробег loaddata со всеми @recievers закомментированы, потому что они будут уволены, когда loaddataзагружает ваши данные. Если@recievers создавать другие объекты как побочный эффект, это вызовет столкновения.

Во-первых: я считаю, что ваш канал unix написан неправильно.

# 1: Dump your json
$ python manage.py dumpdata --all > ./mydump.json

# 2: dump your schema
$ python manage.py sqlflush > schema.sql

# 3: launch psql
# this is how I launch psql ( seems to be more portable between rhel/ubuntu )
# you might use a bit different technique, and that is ok.

Отредактировано: (очень важно) Убедитесь, что на вашем сервере не запущены активные соединения django. Затем:

$ sudo -u myuser psql mydatabase

# 4: read in schema
mydatabase=# \i schema.sql
mydatabase=# ctrl-d

# 5: load back in your fixture. 
$ python manage.py loaddata ./mydump.json

Второе: если с твоей трубкой все в порядке... и может быть. В зависимости от вашей схемы / данных вам может понадобиться использовать натуральные ключи.

# 1: Dump your json using ( -n ) natural keys.
$ python manage.py dumpdata -n --all > ./mydump.json

# followed by steps 2-5 above.
Другие вопросы по тегам