Используйте 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 = ""