ホームページ >データベース >mysql チュートリアル >PostgreSQL で計算列をエミュレートするにはどうすればよいですか?

PostgreSQL で計算列をエミュレートするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-21 17:12:17489ブラウズ

How Can I Emulate Computed Columns in PostgreSQL?

PostgreSQL 内での計算列のシミュレーション

MS SQL Server とは異なり、PostgreSQL は計算列をネイティブにサポートしません。 ただし、この機能を効果的に複製する方法がいくつかあります。

PostgreSQL 12 以降

PostgreSQL 12 では、SQL Server の計算列の動作を反映する STORED 生成列が導入されました。 これらの列はテーブル内に物理的に保存され、クエリ中に簡単にアクセスできます。

<code class="language-sql">CREATE TABLE tbl (
  int1    int,
  int2    int,
  product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);</code>

PostgreSQL 11 以前

古い PostgreSQL バージョンの場合、仮想生成列をシミュレートするには関数と属性の表記が必要です。

関数構文:

<code class="language-sql">CREATE FUNCTION col(tbl) RETURNS type AS 'expression';</code>

使用法:

<code class="language-sql">SELECT tbl.col, ... FROM tbl;</code>

このアプローチは、仮想生成列を模倣します。ただし、SELECT *には含まれません。

代替アプローチ

  • ビュー: 計算列を組み込んだビューを構築します。 SELECT * を使用すると、元の列と計算された列の両方が取得されます。
  • トリガー: ソース列が変更されるたびに計算列を自動的に更新するトリガーを作成して、永続的な計算列を実装します。
  • マテリアライズド ビュー: 頻繁にクエリされる計算列の場合、マテリアライズド ビューは事前に計算して結果を保存し、パフォーマンスを最適化します。

重要な考慮事項:

  • STORED で生成された列 (PostgreSQL 12) は SELECT * に含まれます。
  • 式インデックスを有効にするには、仮想生成列をエミュレートする関数を IMMUTABLE として定義する必要があります。
  • マテリアライズド ビューは、頻繁なアクセスが必要な永続的な計算列に最適です。

以上がPostgreSQL で計算列をエミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。