PostgreSQLはサポートしていますか計算列MS SQL Server のようなものですか?
ドキュメントには何も見つかりませんが、この機能は他の多くの DBMS に含まれているので、何か見落としているのでしょうか?
ベストアンサー1
Postgres 12以降
STORED
生成された列Postgres 12で導入されたSQL標準で定義され、DB2、MySQL、Oracleなどの一部のRDBMSで実装されています。または同様の「計算された列」SQL Server の。
些細な例:
CREATE TABLE tbl (
int1 int
, int2 int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);
VIRTUAL
生成された列は、次の反復のいずれかで発生する可能性があります。(Postgres 16 ではまだありません)。
関連している:
Postgres 11 以前
Postgres 11までは「生成列」はサポートされていません。生成列を
エミュレートするには、VIRTUAL
関数使用して属性表記(tbl.col
) それ仮想的に生成された列とよく似た外観と動作これは歴史的な理由からPostgresに存在するちょっとした構文上のおかしな点ですが、このケースに当てはまります。この関連する回答にはコード例:
ただし、式 (列のように見える) は には含まれませんSELECT * FROM tbl
。常に明示的にリストする必要があります。
マッチングでサポートすることもできます表現インデックス- 関数が である場合IMMUTABLE
。例:
CREATE FUNCTION col(tbl) ... AS ... -- your computed expression here
CREATE INDEX ON tbl(col(tbl));
代替案
あるいは、同様の機能をVIEW
オプションで式インデックスと結合します。SELECT *
生成された列を含めることができます。
「永続化」(STORED
)計算列は次のように実装できます。トリガー機能的に同等の方法で。
マテリアライズドビュー関連する概念である、Postgres 9.3以降で実装
以前のバージョンでは、MV を手動で管理できました。