Op til Postgres 11 genererede kolonner er ikke understøttet - som defineret i SQL-standarden og implementeret af nogle RDBMS, herunder DB2, MySQL og Oracle. Heller ikke de lignende "beregnede kolonner" af SQL Server.
STORED
genererede kolonner introduceres med Postgres 12 . Trivielt eksempel:
CREATE TABLE tbl (
int1 int
, int2 int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);
db<>spil her
VIRTUAL
genererede kolonner kan komme med en af de næste iterationer. (Ikke i Postgres 14 endnu).
Relateret:
- Attributnotation for funktionskald giver fejl
Indtil da , kan du efterligne VIRTUAL
genererede kolonner med en funktion ved hjælp af attributnotation (tbl.col
), der ligner og fungerer meget som en virtuel genereret kolonne . Det er lidt af en syntaksmærkelighed, som eksisterer i Postgres af historiske årsager og tilfældigvis passer til sagen. Dette relaterede svar har kodeeksempler :
- Vil du gemme almindelig forespørgsel som kolonne?
Udtrykket (som ligner en kolonne) er ikke inkluderet i en SELECT * FROM tbl
, selvom. Du skal altid angive det eksplicit.
Kan også understøttes med et matchende udtryksindeks - forudsat at funktionen er IMMUTABLE
. Ligesom:
CREATE FUNCTION col(tbl) ... AS ... -- your computed expression here
CREATE INDEX ON tbl(col(tbl));
Alternativer
Alternativt kan du implementere lignende funktionalitet med en VIEW
, eventuelt kombineret med udtryksindekser. Derefter SELECT *
kan inkludere den genererede kolonne.
"Vedvarende" (STORED
) beregnede kolonner kan implementeres med triggere på en funktionelt identisk måde.
Materialiserede visninger er et nært beslægtet koncept, implementeret siden Postgres 9.3.
I tidligere versioner kan man administrere MV'er manuelt.