Уверете се, че базата данни е в последователно състояние.
Ако приемем, че не сте мигрирали данните от предишната MySQL база данни и че работите в режим на разработка (а не в производствен режим), така че не е нужно да се притеснявате за запазването на данните:
- Преименувайте вашата миграция обратно на
1.sql
. Само защото сте изпълнили миграцията в предишна база данни, това не означава, че когато ще я изпълните в напълно нова база данни, това е втора еволюция:за новата база данни тя все още е първата. - Декларирайте колоните си с първичен ключ по следния начин:
id bigserial primary key
и премахнетеconstraint
. - Уверете се, че имате празна база данни в PostgreSQL. Премахнете базата данни и я създайте отново (
dropdb
,createdb
). - Изпълнете миграцията на вашата база данни и гледайте резултата, за да се уверите, че миграцията е изпълнена. Вижте Управление на еволюции на бази данни .
- Използвайте PgAdmin или подобен инструмент като Toad Extension за Eclipse за да проверите дали структурата на базата данни е създадена правилно.
Като алтернатива може да откриете, че Flyway предоставя по-всеобхватен подход към миграциите на бази данни. Има плъгин за Play Framework.
За да избегнете изключението Error getting sequence nextval
, коректно анотирайте дефинициите на класа на обекта по следния начин:
@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; }
Проверете базата данни, за да се уверите, че sequenceName
е името на последователността, създадена от PostgreSQL.
За повече информация вижте:
- Ebean изглежда за грешно име на последователност в Play Framework 2
- Конфигурирайте JPA за да позволите на PostgreSQL да генерира стойността на първичния ключ
- EJB3 JPA:3 начина за генериране на първичен ключ чрез @GeneratedValue
- PersistenceException:Грешка при получаване на последователност nextval
- Play Framework:Грешка при получаване на последователност nextval с помощта на H2 база данни в паметта
- Тип на анотацията GeneratedValue