0

在 Play Framework 中,我使用进化来管理数据库迁移。我还将 H2 组合用于开发和测试,将 Postgresql 用于生产。但是,H2 似乎将所有表名和列名都大写,而 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

4

2 回答 2

1

如本文所述,可以选择忽略 H2 中的大小写

我的 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 = ""
于 2014-12-10T03:42:37.170 回答
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 都将使用大写字符创建此表。

于 2014-12-12T01:38:40.127 回答