J'ai récemment créé un vidage SQL d'une base de données derrière un projet Django, et après avoir nettoyé le SQL un peu pu restaurer la base de données et toutes les données. Le problème était que les séquences étaient tout mucked up. J'ai essayé d'ajouter un nouvel utilisateur et généré l'erreur Python IntegrityError: duplicate key violates unique constraint
.Un vidage Postgresql crée-t-il des séquences qui commencent par ou après la dernière touche?
Naturellement j'ai pensé que mon vidage SQL n'a pas redémarré la séquence. Mais il l'a fait:
DROP SEQUENCE "auth_user_id_seq" CASCADE;
CREATE SEQUENCE "auth_user_id_seq" INCREMENT 1 START 446 MAXVALUE 9223372036854775807 MINVALUE 1 CACHE 1;
ALTER TABLE "auth_user_id_seq" OWNER TO "db_user";
je me suis dit qu'une tentative répétée à la création d'un utilisateur (ou une nouvelle ligne dans une table avec les données existantes et une telle séquence) autorisés pour objet/création de la ligne réussie. Cela a résolu le problème pressant. Mais étant donné que le dernier ID utilisateur dans cette table était 446 - la même valeur de départ dans la création de la séquence ci-dessus - il semble que Postgresql essayait simplement de commencer à créer des lignes avec cette clé.
Le vidage SQL fournit-il la mauvaise clé de démarrage de 1? Ou devrais-je appeler une autre commande pour démarrer des séquences après l'ID de début donné? Très curieux.
Question de suivi ajoutée: http://stackoverflow.com/questions/3168187/django-orm-misreading-postgresql-sequences – bennylope