Virtual generated columns в PostgreSQL 18
В PostgreSQL 18 добавят виртуальные сгенерированные столбцы (комит).
Ранее PostgreSQL уже поддерживал сгенерированные столбцы (начиная с версии 12), но только в варианте STORED, когда результат вычислений сохраняется в таблице. Теперь появилась возможность вычислять значения «на лету» при чтении, что экономит место и даёт больше гибкости в проектировании схем данных.
Как создать виртуальный столбец?
Синтаксис очень похож на STORED-столбцы, но с добавлением VIRTUAL (или просто без указания типа хранения, так как VIRTUAL теперь — поведение по умолчанию):
CREATE TABLE t (
a INT,
b INT
);
INSERT INTO t VALUES (1, 99);
ALTER TABLE t ADD COLUMN c INT GENERATED ALWAYS AS (a + b) STORED;
ALTER TABLE t ADD COLUMN d INT GENERATED ALWAYS AS (a - b) VIRTUAL;
так выглядят данные:
SELECT * FROM t;
a | b | c | d
---+----+-----+-----
1 | 99 | 100 | -98
В этом примере:
c (STORED) хранится в таблице и не пересчитывается при каждом запросе.
d (VIRTUAL) вычисляется динамически при каждом запросе.
Ограничения виртуальных столбцов
Несмотря на удобство виртуальных столбцов, у них есть ряд ограничений:
- Нельзя индексировать.
- Нельзя использовать в UNIQUE и FOREIGN KEY.
- Нельзя объявить NOT NULL, но можно использовать CHECK.
- Нельзя использовать в логической репликации.
- Нельзя изменять выражение (ALTER TABLE… DROP EXPRESSION).
- Нельзя использовать в качестве столбца с типом DOMAIN.
Некоторые из этих ограничений могут быть сняты в будущих версиях PostgreSQL.
Приглашаю вас подписаться на мой канал в telegram
⠀