不超過(guò)Postgres 11生成列不支持-就像SQL標(biāo)準(zhǔn)中定義的那樣,由一些RDBMS實(shí)現(xiàn),包括DB2、MySQL和Oracle。也不像“計(jì)算列”SQL Server。
STORED
生成的列與Postgres 12..微不足道的例子:
CREATE TABLE tbl (
int1 int, int2 int, product bigint GENERATED ALWAYS AS (int1 * int2) STORED);
DB<>小提琴這里
VIRTUAL
生成的列可能與下一次迭代一起出現(xiàn)。有關(guān):
在那之前,你可以模仿VIRTUAL
生成的列具有功能使用屬性表示法 (tbl.col
)看起來(lái)和工作方式類似于虛擬生成的列。..由于歷史原因,這在Postgres中存在一些語(yǔ)法上的奇怪之處,正好適合這種情況。這個(gè)相關(guān)的答案代碼示例:
表達(dá)式(看起來(lái)像列)不包括在SELECT * FROM tbl
盡管如此。你總是必須明確地列出它。
也可以通過(guò)匹配來(lái)支持表達(dá)指數(shù)-只要職能是IMMUTABLE
..比如:
CREATE FUNCTION col(tbl) ... AS ... -- your computed expression hereCREATE INDEX ON tbl(col(tbl));
備選方案
或者,您可以使用VIEW
,可選地與表達(dá)式索引耦合。然后SELECT *
可以包括生成的列。
“堅(jiān)持”(STORED
)計(jì)算列可以用觸發(fā)器以一種功能相同的方式。
物化觀點(diǎn)是一個(gè)密切相關(guān)的概念,自Postgres 9.3以來(lái)實(shí)施.
在早期版本中,可以手動(dòng)管理MVS。