Assurez-vous que la base de données est dans un état cohérent.
En supposant que vous n'avez pas migré les données de la base de données MySQL précédente et que vous travaillez en mode développement (et non en mode production), vous n'avez donc pas à vous soucier de la préservation des données :
- Renommer votre migration en
1.sql
. Ce n'est pas parce que vous avez exécuté la migration dans une base de données précédente que lorsque vous allez l'exécuter dans une base de données entièrement nouvelle, il s'agit d'une seconde évolution :pour la nouvelle base de données, c'est toujours la première. - Déclarez vos colonnes de clé primaire comme ceci :
id bigserial primary key
et supprimer laconstraint
. - Assurez-vous d'avoir une base de données vide dans PostgreSQL. Supprimez la base de données et recréez-la (
dropdb
,createdb
). - Exécutez la migration de votre base de données et observez le résultat pour vous assurer que la migration a été exécutée. Voir Gérer les évolutions de la base de données .
- Utilisez PgAdmin ou un outil similaire tel que Toad Extension for Eclipse pour vérifier que la structure de la base de données a été correctement créée.
Alternativement, vous pouvez découvrir que Flyway fournit une approche plus complète des migrations de bases de données. Il existe un plugin pour Play Framework.
Pour éviter l'exception Error getting sequence nextval
, annotez correctement les définitions de classe d'entité comme ceci :
@Id
@SequenceGenerator(name="product_gen", sequenceName="product_id_seq", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="product_gen")
@Column(name="id")
public Long getId() { return id; }
Inspectez la base de données pour vous assurer que sequenceName
est le nom de la séquence créée par PostgreSQL.
Pour plus d'informations, consultez :
- Regards Ebean pour le mauvais nom de séquence dans Play Framework 2
- Configurer JPA pour laisser PostgreSQL générer la valeur de la clé primaire
- EJB3 JPA :3 façons de générer une clé primaire via @GeneratedValue
- PersistenceException :erreur lors de l'obtention de la séquence nextval
- Play Framework :erreur lors de l'obtention de la séquence nextval à l'aide de la base de données en mémoire H2
- Type d'annotation GeneratedValue