在 dev 中使用 H2,在 prod 中使用 Postgresql



在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 都将使用大写字符创建此表。

最新更新