[解決済み] PostgreSQLの計算/計算/仮想/派生カラム
質問
PostgreSQL は MS SQL Server のような計算された列をサポートしていますか? ドキュメントには何も書かれていませんが、この機能は他の多くのDBMSに含まれているため、何か見落としているのではないかと思いました。
例えば http://msdn.microsoft.com/en-us/library/ms191250.aspx
どのように解決するのですか?
Postgres 11 まで 生成されたカラム はサポートされていません - 標準SQLで定義され、DB2、MySQL、Oracleを含むいくつかのRDBMSで実装されているように。また、同様の computed columns" のような SQL Server の列もサポートされていません。
STORED
で生成されたカラムが導入されます。
Postgres 12
. 些細な例です。
CREATE TABLE tbl (
int1 int
, int2 int
, product bigint GENERATED ALWAYS AS (int1 * int2) STORED
);
db<>フィドル ここで
VIRTUAL
生成された列は、次の反復処理のいずれかに含まれるかもしれません。(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を手動で管理することができます。
関連
-
[解決済み] psql: FATAL: データベース "<user>" が存在しない
-
[解決済み] PostgreSQLの場合。PostgreSQLのテーブルを表示する
-
[解決済み] PostgreSQLの "DESCRIBE TABLE"
-
[解決済み] PostgreSQL コマンドラインユーティリティ: psql を終了する方法
-
[解決済み] PostgreSQLのユーザーパスワードを変更する方法を教えてください。
-
[解決済み] 複数の列でgroup byを使用する
-
[解決済み] どのバージョンのPostgreSQLを使用していますか?
-
[解決済み] PostgreSQLからのPL/pgSQL出力をCSVファイルに保存する
-
[解決済み] SQL ServerでGROUP BYを使って文字列を連結する方法とは?
-
[解決済み】Mac OS XでPostgreSQLサーバーを起動するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[エラー処理] [MySQL] [Err] 1241 - オペランドは 1 つのカラムを含む必要があります。
-
SQLラーニングノート--オペランドには1つのカラムが必要です。
-
解決策:java.sql.SQLException: ユーザー ''@'localhost'' (パスワード: YES を使用) のアクセスが拒否されました。
-
MySQL】1136 - 列数が1行目の値数と一致しない問題を解決
-
[解決済み] Oracle Trigger ORA-04098: トリガーが無効で、再バリデーションに失敗しました。
-
[解決済み] アドホッククエリとは何ですか?
-
[解決済み] SQL Serverでストアドプロシージャ内のテキストを検索する
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] SQL Serverで結果をページ分割する最も良い方法は何ですか?
-
[解決済み] T-SQL文の接頭辞Nの意味と使うべきタイミングは?