Až 11 vygenerovaných sloupců nejsou podporovány - jak je definováno ve standardu SQL a implementováno některými RDBMS včetně DB2, MySQL a Oracle. Ani podobné "počítané sloupce" serveru SQL.
STORED
generované sloupce jsou uvedeny v Postgres 12 . Triviální příklad:
CREATE TABLE tbl (
int1 int
, int2 int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);
db<>zde hrajte
VIRTUAL
generované sloupce mohou přijít s jednou z dalších iterací. (Zatím ne v Postgres 14).
Související:
- Zápis atributu pro volání funkce poskytuje chybu
Do té doby , můžete emulovat VIRTUAL
generované sloupce s funkcí pomocí zápisu atributů (tbl.col
), který vypadá a funguje podobně jako virtuální generovaný sloupec . To je trochu syntaktická zvláštnost, která v Postgresu existuje z historických důvodů a náhodou tomu odpovídá. Tato související odpověď obsahuje příklady kódu :
- Uložit běžný dotaz jako sloupec?
Výraz (vypadá jako sloupec) není zahrnut v SELECT * FROM tbl
, ačkoli. Vždy to musíte výslovně uvést.
Může být také podporován s odpovídajícím indexem výrazu - za předpokladu, že funkce je IMMUTABLE
. Jako:
CREATE FUNCTION col(tbl) ... AS ... -- your computed expression here
CREATE INDEX ON tbl(col(tbl));
Alternativy
Případně můžete implementovat podobnou funkci pomocí VIEW
, volitelně ve spojení s výrazovými indexy. Poté SELECT *
může zahrnovat vygenerovaný sloupec.
"Trvalo" (STORED
) počítané sloupce lze implementovat pomocí spouštěčů funkčně identickým způsobem.
Materializované pohledy jsou úzce souvisejícím konceptem implementovaným od Postgresu 9.3.
V dřívějších verzích lze MV spravovat ručně.