Используйте H2 в dev и Postgresql в prod

В Play Framework я использую эволюции для управления миграцией базы данных. Я также использую комбинацию 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

2 ответа

Решение

Мой предыдущий ответ был неверным. Я не знал, почему это работало на короткое время, на машине с 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.

Существует возможность игнорировать регистр в 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 = ""
Другие вопросы по тегам