sql >> Databáze >  >> RDS >> PostgreSQL

Vypočítané / vypočítané / virtuální / odvozené sloupce v PostgreSQL

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ě.



  1. Jak vytvořit soubor login.sql pro SQLcl

  2. Jak rozdělím řetězec, abych měl přístup k položce x?

  3. Jak na serveru SQL Server pivotovat pro více sloupců

  4. MySQL - Kontrolujte, který řádek je vrácen skupinou