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.