#postgresql
#postgresql
Вопрос:
Я хотел бы иметь таблицу с удаленным столбцом, содержащую дату, когда элемент был автоматически удален. Строки с нулевым значением в удаленном столбце являются активными. Я не смог понять наш синтаксис для создания раздела для нулевых значений в удаленном столбце. Каков синтаксис создания такого столбца?
create table my_table_pointing(street_id int, p_city_id int, name varchar(10), deleted date)
PARTITION BY RANGE (deleted);
CREATE TABLE my_table_pointing_2020 PARTITION OF my_table_pointing
FOR VALUES FROM ('2020-01-01') TO ('2021-01-01');
CREATE TABLE my_table_pointing_active PARTITION OF my_table_pointing
"for all rows where date is null"...
Спасибо!
Комментарии:
1. Возможно, отфильтрованный индекс с
where deleted is null
более полезен в этом случае.2. @LaurenzAlbe постепенная предварительная организация ваших данных для повышения эффективности некоторых будущих действий является одним из важных применений секционирования.
3. @LaurenzAlbe, Но я полагаю, это должно происходить только один раз за строку. Ничем не отличается от удаления из активной таблицы и вставки в таблицу истории.
Ответ №1:
При условии, что вы используете PG11 или более позднюю версию, вы можете создать раздел по умолчанию, и строки с deleted is null
будут перенаправляться туда.
create table my_table_pointing_active partition of my_table_pointing default;
Комментарии:
1. Может быть, он также захочет создать проверку, подтверждающую ограничение
deleted IS NULL
?2. @jjanes Я бы не стал, но тогда мой другой раздел (история) был бы от
-infinity
доinfinity
вот так: db-fiddle.com/f/gRKWcFHHFikxuv3WC19rFL/0 Отредактируйте, чтобы добавить: я не думаю, что я когда-либо использовал бы разделение для этого без большого дополнительного тестирования. Плюс я один из тех клоунов, которые помещают'9999-12-31'
в мои текущие записи вместоnull
3. Спасибо @Mike Organek. Я думал о разделе по умолчанию, но есть два недостатка 1) когда я добавляю новый раздел, Postgres сканирует весь раздел по умолчанию, чтобы увидеть, нужно ли копировать записи оттуда во вновь созданный раздел. Если значения null перейдут в их собственный раздел, отличный от стандартного, это будет пропущено. 2) Я предпочитаю сохранить раздел по умолчанию, чтобы отслеживать проблемные даты, у которых нет разделов (будущие даты, очень старые даты).