У меня есть приложение springboot, в котором мне нужно реализовать разделение базы данных (по "диапазону") для таблицы сообщений на основе значения атрибута posted_at.
Entity:
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(updatable = false, nullable = false)
private BigInteger id;
private String title;
private Date postedDate;
.....
}
Миграция Liquibase:
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd">
<changeSet id="00001" author="author">
<sql splitStatements="true">
CREATE TABLE posts (
id bigint primary key,
title varchar(200),
posted_at timestamp with time zone) PARTITION BY RANGE (posted_at)
</sql>
</changeSet>
Когда я запускаю указанную выше миграцию db, Postgres жалуется, что я должен добавить первичный ключ также в ключи разделов, чего я действительно не хочу. Если я удалю первичный ключ из таблицы, JPA начнет выдавать исключение, говоря, что у меня не может быть объекта без поля @Id
. Как это можно решить?
PS: Я использую простой sql внутри миграции Liquibase, так как Liquibase не имеет прямой поддержки для разделения db.