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
со всеми @reciever
s закомментированы, потому что они будут уволены, когда loaddata
загружает ваши данные. Если@reciever
s создавать другие объекты как побочный эффект, это вызовет столкновения.
Во-первых: я считаю, что ваш канал 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.