(timestamp NOT NULL), PK(id,ts)
Хочу сделать секционирование этой таблицы по столбцу ts, только по неделям.
создавал эту таблицу с помощью PARTITION BY RANGE(ts).
теперь делаю секцию:
CREATE TABLE test_2021_31 PARTITION OF test FOR VALUES FROM (my_to_char(ts) == '2021_31') TO (my_to_char(ts) = '2021_32');
Прилетает
cannot use column reference in partition bound expression, то есть нельзя использовать выражения при создании секций.
Как в таком случае мне грамотнее выполнить секционирование?
my_to_char() от входной даты возвращает год и день недели YYYY_W: ex. 2021_31
> Хочу сделать секционирование этой таблицы по столбцу ts, только по неделям. Ну так и сделайте. Т.е. сразу задавайте константы в partition bound expressions. Можно использовать pg_partman для автоматизации этого, например.
> partition bound expressions под этим подразумевается использование CHECK при создании таблиц-секций?
Я имел в виду — просто явно выполняйте: CREATE TABLE test_2021_31 PARTITION OF test FOR VALUES FROM ('2021-03-01') TO ('2021-03-07'); -- ну или какие там границы недели
А, ну так это не сработает, потому что надо границы недели вычислять
зачем в пк включать время?
Хмм... ну так вычисляйте, в чём проблема-то?
В том, что в явном виде выражения нельзя использовать при создании секций
Иначе постгрес ругается, что нет констрейна на это поле
в смысле?! где ругается?
В прямом Был пк на id В таком случае, с пк на id, нельзя пометить таблицу как подлежащую секционированию ( по столбцу ts)
Ну так посылайте команду CREATE с заранее рассчитанными границами, я это имел в виду.
Понял, попробую, спасибо
Обсуждают сегодня