在Play Framework中,我使用evolutions来管理数据库迁移。我还使用 H2 的组合进行开发和测试,将 Postgresql 组合用于生产。但是,H2 似乎将所有表名和列名都大写,而 Postgresql 则恰恰相反。
有没有办法让这两个数据库很好地协同工作?
以下是我的应用程序.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
H2 中有一个忽略大小写的选项,如本文所述。
我的应用程序现在像这样:
db.default.driver = org.h2.Driver
db.default.url = "jdbc:h2:mem:play;MODE=PostgreSQL;IGNORECASE=TRUE"
db.default.user = ""
db.default.password = ""
我之前的回答是错误的。我不知道为什么它在运行 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 都将使用大写字符创建此表。