sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLの計算/計算/仮想/派生列

    Postgres11までの生成された列 SQL標準で定義され、DB2、MySQL、Oracleなどの一部のRDBMSによって実装されているため、サポートされていません。同様の「計算列」もありません SQLServerの。

    STORED 生成された列はPostgres12で導入されます 。簡単な例:

    CREATE TABLE tbl (
      int1    int
    , int2    int
    , product bigint GENERATED ALWAYS AS (int1 * int2) STORED
    );
    

    db<>ここでフィドル

    VIRTUAL 生成された列には、次の反復の1つが含まれる場合があります。 (Postgres 14にはまだありません)。

    関連:

    • 関数呼び出しの属性表記でエラーが発生する

    それまで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を手動で管理できます。



    1. クエリ中にMySQLサーバーへの接続が失われました

    2. Oracle SQL Developerでパッケージを作成する方法は?

    3. 新しいDBシステムを学ぶことの利点

    4. PrintStatementを使用してVARCHAR(MAX)を印刷するにはどうすればよいですか?