我正在使用plaframework 2.2.1,我已经创建了一个项目MySQL,但现在我想将我的项目转移到PostgreSQL,但是重新创建数据库演变有一些错误。
我的旧进化(1.sql)for mysql运行良好是:
# --- Created by Ebean DDL
# To stop Ebean DDL generation, remove this comment and start using Evolutions
# --- !Ups
create table product (
id bigint auto_increment not null,
name varchar(255),
price float,
constraint pk_product primary key (id))
;
create table shop (
id bigint auto_increment not null,
name varchar(255),
address_line1 varchar(255),
address_line2 varchar(255),
address_line3 varchar(255),
city varchar(255),
town varchar(255),
phone_number varchar(255),
owner_email varchar(255),
constraint pk_shop primary key (id))
;
create table user (
email varchar(255) not null,
password varchar(255),
first_name varchar(255),
last_name varchar(255),
constraint pk_user primary key (email))
;
create table product_shop (
product_id bigint not null,
shop_id bigint not null,
constraint pk_product_shop primary key (product_id, shop_id))
;
alter table shop add constraint fk_shop_owner_1 foreign key (owner_email) references user (email) on delete restrict on update restrict;
create index ix_shop_owner_1 on shop (owner_email);
alter table product_shop add constraint fk_product_shop_product_01 foreign key (product_id) references product (id) on delete restrict on update restrict;
alter table product_shop add constraint fk_product_shop_shop_02 foreign key (shop_id) references shop (id) on delete restrict on update restrict;
# --- !Downs
SET FOREIGN_KEY_CHECKS=0;
drop table product;
drop table product_shop;
drop table shop;
drop table user;
SET FOREIGN_KEY_CHECKS=1;
然后我删除了1.sql并为下面给出的postgresql重新创建了我的进化(1.sql)
# --- !Ups
create table member (
email varchar(255) PRIMARY KEY,
password varchar(255),
first_name varchar(255),
last_name varchar(255)
)
;
create table product (
id bigserial PRIMARY KEY,
name varchar(255),
price real
)
;
create table shop (
id bigserial PRIMARY KEY,
name varchar(255),
address_line1 varchar(255),
address_line2 varchar(255),
address_line3 varchar(255),
city varchar(255),
town varchar(255),
phone_number varchar(255),
email varchar(255) REFERENCES member
)
;
create table product_shop (
product_id bigint REFERENCES product ON DELETE RESTRICT,
shop_id bigint REFERENCES shop ON DELETE CASCADE,
PRIMARY KEY (product_id, shop_id)
)
;
两个sql之间有什么区别吗?
我是否需要添加一些内容以使我的新1.sql函数在我的mysql evolution中与我的旧1.sql相同?我的新进化创建了我的数据库,但是当我尝试在我的 shop 表中插入值时,它显示相同的页面,并且它与使用mysql的工作方式不同,意味着不加载下一页。在产品表中插入时,会显示此信息。
[PersistenceException: Error getting sequence nextval]
In C:\Users\Myproject\app\models\Product.java at line 36.
33
34 public static Product create(String name,float price) {
35 Product product = new Product(name, price);
36 product.save();
37 product.saveManyToManyAssociations("shops");
38 return product;
39 }
40 public static void delete(Long id) {
41 find.ref(id).delete();
我也无法在PgAdmin III中找到2.sql创建的数据库?
答案 0 :(得分:0)
确保数据库处于一致状态。
假设您没有迁移先前MySQL数据库中的数据,并且您正在开发模式(不是生产模式),那么您不必担心保留数据:
1.sql
。仅仅因为你在以前的数据库中执行了迁移,这并不意味着当你要在一个全新的数据库中执行它时,这是第二次演变:对于新数据库,它仍然是第一个。id bigserial primary key
并删除constraint
。dropdb
,createdb
)。或者,您可能会发现Flyway提供了更全面的数据库迁移方法。 Play框架有plugin。
要避免异常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创建的序列的名称。
有关详细信息,请参阅: