H2 - Postgres режим поддержки net тип данных - PullRequest
0 голосов
/ 16 марта 2020

У меня есть DAO, который обращается к базе данных Postgres. Я хочу использовать H2 для своих модульных тестов - все отлично работает, за исключением того, что в таблице, над которой я работаю, есть столбец с inet типом данных - поэтому я получаю исключение

Неизвестный тип данных: "inet "; SQL оператор: удалить из таблицы, где id =? и ip_address =? :: inet [50004-200]

Некоторое время назад я использовал H2 - я установил режим Postgres для соединения: url jdbc:h2:mem:test;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE

В любом случае я могу выполнить этот запрос в H2 и поддержать этот тип данных?

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

Режимы совместимости, такие как предоставляемые H2, не идеальны, они не обеспечивают 100% охват всех функций и 100% идентичное поведение.

Вместо использования другой базы данных в ваших модульных тестах, и пытаясь сделать его как можно более близким (и в любом случае укусить от различий в производстве), я бы рекомендовал использовать модуль PostgreSQL testcontainers- java. Это позволяет вам раскручивать PostgreSQL docker изображений для ваших модульных тестов.

Имейте в виду, что это повлияет на производительность, поскольку, вероятно, будет немного медленнее, чем использование H2, из-за времени запуска docker изображение. Я бы порекомендовал тщательно продумать, действительно ли ваши тесты должны go относиться к базе данных, или могут сойти с поддельных данных или, по крайней мере, ограничить объем тестов, которые (необходимо) go, для базы данных.

0 голосов
/ 17 марта 2020

Самый большой вопрос здесь - как была создана ваша таблица с неизвестным типом данных? Столбец ip_address должен иметь какой-то другой тип данных, известный H2.

На самом деле вы можете создать домен, подобный этому:

CREATE DOMAIN INET AS VARCHAR;

Но использование везде одной и той же системы баз данных было бы лучше.

...