在Play Framework中,我使用evolutions来管理数据库迁移。我还使用H2组合开发和测试,Postgresql组合生产。但是,H2似乎UPPERCASE所有的表名和列名,而Postgresql却恰恰相反。
有没有办法让这两个数据库一起玩得很好?
以下是我的application.conf的摘录:
db.default.driver = org.h2.Driver
db.default.url = "jdbc:h2:mem:play;MODE=PostgreSQL"
db.default.user = ""
db.default.password = ""
# db.default: {
# driver = org.postgresql.Driver
# url = "jdbc:postgresql://127.0.0.1/khanguyen"
# user = khanguyen
# password = ""
# }
我使用Slick 2.1.0
答案 0 :(得分:1)
可以选择在H2中忽略大小写,如post中所述。
我的application.conf现在是这样的:
db.default.driver = org.h2.Driver
db.default.url = "jdbc:h2:mem:play;MODE=PostgreSQL;IGNORECASE=TRUE"
db.default.user = ""
db.default.password = ""
答案 1 :(得分:1)
我之前的回答是错误的。在运行Ubuntu的机器上,我不知道它为什么会在短时间内工作。
对于区分大小写的数据库系统(如H2或Postgresql),如果要保留字符大小写,则应使用围绕所有表和列名称的双引号。
演变将如下所示:
CREATE TABLE "products" (
"ean" bigserial NOT NULL,
"name" varchar(255) NOT NULL,
"expiration_date" date NOT NULL,
"expiration_time" time NOT NULL,
PRIMARY KEY ("ean")
);
然后H2和Postgres将使用小写字符创建此表。或者:
CREATE TABLE "PRODUCTS" (
"EAN" bigserial NOT NULL,
"NAME" varchar(255) NOT NULL,
"EXPIRATION_DATE" date NOT NULL,
"EXPIRATION_TIME" time NOT NULL,
PRIMARY KEY ("EAN")
);
然后H2和Postgres都会用UPPERCASE字符创建这个表。