#postgresql #spring-boot #hibernate
Вопрос:
У меня была весенняя загрузка 1.5.x, а теперь я перешел на 2.3.8.РЕЛИЗ.
У меня есть объект с полем «private LocalDateTime EndTime», и в базе данных postgres он был сопоставлен с типом «bytea». Теперь, когда у меня, вероятно, появились более новые зависимости, в flyway появилась следующая ошибка:
Schema-validation: wrong column type encountered in column [end_time] in table [stream_info]; found [bytea (Types#BINARY)], but expecting [timestamp (Types#TIMESTAMP)]
Это также появляется, когда я запускаю приложение с совершенно новой базой данных postgres.
Кто-нибудь знает, что мне теперь делать? Нужен ли мне конвертер? И в чем здесь может быть проблема?
Ответ №1:
Похоже, вы начали с версии Hibernate, которая еще не поддерживалась LocalDateTime
, поэтому она была сериализована с помощью сериализации Java как bytea
. Теперь вы используете более новую версию Hibernate, которая поддерживает этот тип и правильно сопоставляет его timestamp
. Единственный обходной путь-это перенести данные. Вам придется прочитать каждую строку, десериализовать данные и записать их во временный timestamp
столбец. После переноса всех данных вы можете переименовать столбец или удалить bytea
столбец в пользу timestamp
столбца. В любом случае, это потребует усилий по переносу вручную.
Комментарии:
1. Чтобы добавить к этому: Flyway не обновляет основные версии, если они не следуют друг за другом. Обязательно внимательно прочитайте github.com/spring-projects/spring-boot/wiki/…