Do Postgres 11 wygenerowanych kolumn nie są obsługiwane - zgodnie z definicją w standardzie SQL i zaimplementowane przez niektóre RDBMS, w tym DB2, MySQL i Oracle. Ani podobnych "kolumn obliczanych" SQL Server.
STORED
wygenerowane kolumny są wprowadzane w Postgres 12 . Trywialny przykład:
CREATE TABLE tbl (
int1 int
, int2 int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);
db<>graj tutaj
VIRTUAL
wygenerowane kolumny mogą pochodzić z jednej z kolejnych iteracji. (Jeszcze nie w Postgres 14).
Powiązane:
- Zapis atrybutów dla wywołania funkcji daje błąd
Do tego czasu , możesz emulować VIRTUAL
wygenerowane kolumny z funkcją za pomocą notacji atrybutów (tbl.col
), która wygląda i działa jak wirtualnie wygenerowana kolumna . To trochę dziwna składnia, która istnieje w Postgresie z powodów historycznych i pasuje do przypadku. Ta powiązana odpowiedź zawiera przykłady kodu :
- Zapisać wspólne zapytanie jako kolumnę?
Wyrażenie (wyglądające jak kolumna) nie jest zawarte w SELECT * FROM tbl
, chociaż. Zawsze musisz to wyraźnie wymienić.
Może być również obsługiwany z pasującym indeksem wyrażeń - pod warunkiem, że funkcja jest IMMUTABLE
. Na przykład:
CREATE FUNCTION col(tbl) ... AS ... -- your computed expression here
CREATE INDEX ON tbl(col(tbl));
Alternatywne
Alternatywnie możesz zaimplementować podobną funkcjonalność za pomocą VIEW
, opcjonalnie w połączeniu z indeksami wyrażeń. Następnie SELECT *
może zawierać wygenerowaną kolumnę.
„Utrwalony” (STORED
) kolumny wyliczane mogą być implementowane z wyzwalaczami w funkcjonalnie identyczny sposób.
Widoki zmaterializowane są ściśle powiązaną koncepcją, zaimplementowaną od wersji Postgres 9.3.
We wcześniejszych wersjach można zarządzać MV ręcznie.