Обновить

Комментарии 2

  1. Я создаю будущую партицию

  2. Добавляю CHECK NOT VALID на эту партицию, который проверит, что в таблице нет лишних данных, не удовлетворяющих условию ограничения диапазона блоков

  3. Включаю валидацию

  4. Прикрепляю эту партицию к главной таблице

  5. Удаляю этот CHECK

Констрейнт надо добавлять на default, а не на новую пустую партицию. Тогда всё будет работать и остальная статья не понадобится.

CREATE TABLE events_partition_m66_m67 (LIKE events INCLUDING ALL);

ALTER TABLE events_partition_default
  ADD CONSTRAINT events_partition_default_partition_check
  CHECK event_block < 66000000 NOT VALID;
   
ALTER TABLE events_partition_default
  VALIDATE CONSTRAINT events_partition_default_partition_check;
     
ALTER TABLE events  
  ATTACH PARTITION events_partition_m66_m67 FOR VALUES FROM (66000000) TO (67000000);
       
ALTER TABLE events_partition_default
  DROP CONSTRAINT events_partition_default_partition_check;


Я обратился к GPT, описав проблему и он мне подсказал "действенный 100%-й способ"...

Ну да ну да , кому нужна эта документация )

https://postgrespro.ru/docs/postgresql/17/ddl-partitioning
Точно так же, если в секционированной таблице есть секция DEFAULT, рекомендуется создать ограничение CHECK, которое исключает ограничение секции, подлежащей присоединению. Если этого не сделать, то секция DEFAULT будет просканирована, чтобы убедиться, что она не содержит записей, которые должны быть расположены в присоединяемой секции. 

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации