Зависание сервера при изменении типов данных с использованием postgresql и jpa - PullRequest
0 голосов
/ 14 мая 2019

Я работал на загрузочном сервере Spring, используя JPA / Hibernate в качестве ORM и PostgresQL на бэкэнде.Для развертывания я использую AWS Elastic Beanstalk.У меня было два столбца, которые были меткой времени, но я хотел бы преобразовать их в строку.

Для этого я подключился к базе данных, изменил два столбца на varchar, изменил тип данных в модели в коде и заново развернул приложение.Когда я делаю это, все серверные соединения (либо CrudRepository.save или CrudRepository.update) с измененной таблицей зависают, а затем через некоторое время (вероятно, 5-10 минут) сервер начинает отвечать на соединения, но тип данныхвозвращается к тому, что было до (отметка времени).

код до:

@Temporal(TemporalType.TIMESTAMP)
private Date startTimePerformed;
@Temporal(TemporalType.TIMESTAMP)
private Date endTimePerformed;

код после:

private String startTimeScheduled;
private String endTimeScheduled;

SQL используется для изменения типов:

ALTER TABLE appointment ALTER COLUMN start_time_scheduled TYPE varchar;

Ожидаемые результаты: при попытке вставить новую запись в базу данных с сервером сервер правильно вставляет новый тип данных.

Как правильно переносить данные с помощью JPA и PostgresQL

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Команды DDL являются транзакционными в PostgreSQL.

Таким образом, вы должны добавить коммит после оператора alter, если оператор alter выполняется в транзакции. В противном случае вы блокируете другие транзакции.

0 голосов
/ 14 мая 2019

Попробуйте использовать инструмент переноса базы данных, такой как flyway или liquidbase, для своей работы по миграции баз данных. Так что он может легко поддерживать историю изменений схемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...