JPA + партиции в PostgreSQL. Как реализовать вставку только в партицию?

Есть таблица TABLE в PostgreSQL, у которой n партиций (TABLE_1, TABLE_2, ..., TABLE_n). Есть триггер, который при вставке в таблицу TABLE, вставляет данные в партицию. Триггер:
IF (NEW.program_id=1) THEN INSERT INTO st.table_1 VALUES (NEW.*);
        ELSIF (NEW.program_id=2) THEN INSERT INTO st.table_2 VALUES (NEW.*);
 ....
return NEW;


Есть объект

@Entity
@Table(name = "TABLE", schema = "st")
public class TABLE implements Serializable {


@Getter
@Setter
@Column(name = "id", nullable = false, insertable = false, columnDefinition = "integer auto_increment")
private Integer id;


@Getter
@Setter
@Column(name = "program_id", nullable = false)
private Integer programId;

.... }


Также есть JpaRepository

public interface TableRepository extends JpaRepository<TABLE, Integer> {}


Так вот, при сохранении объекта TABLE

TableRepository.save(myTable);
запись дублируется... Как сделать так, что запись была только в партиции?? В чем именно ошибка? в коде или в триггере?
  • Вопрос задан
  • 466 просмотров
Пригласить эксперта
Ответы на вопрос 1
Neonailol
@Neonailol
hardcore
Триггер должен быть определён как

BEFORE INSERT ON ТАБЛИЦА
FOR EACH ROW EXECUTE PROCEDURE ТРИГГЕР


чтобы избавться от дублирования, триггер функция должна возвращать NULL

Больше информации о разбиении таблиц: Мануал
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы