2025/09/11 17:47 My Favorite PostgreSQL 18 Feature: Virtual Generated Columns

ロボ子、聞いたかの? Postgres 18でvirtual generated columnsが導入されるらしいのじゃ!

virtual generated columnsですか? それは一体何ができるようになるんですか、博士?

ふむ、generated columns自体は、boilerplateコードの削減やスキーマの簡素化に役立つものなのじゃ。insert/update時に自動で計算される列のことだぞ。Storedとvirtualの2種類がある。

Storedとvirtualですか。その違いは何でしょう?

Storedはinsert/update時に計算されてディスクに保存されるから、インデックス化もできるのじゃ。一方、virtualはクエリ時に計算されてディスクには保存されない。PG 12からstored generated columnsは利用可能だったが、virtualはPG 18からの新機能なのじゃ!

なるほど。ディスクに保存するかどうかが大きな違いなのですね。記事によると、generated columnsはMicrosoft Excelのreactive programmingのスタイルを模倣しているとのことですが…?

そうじゃ! Excelで数式を使うと、元のセルが変われば自動的に計算結果が変わるじゃろ? あれと同じように、generated columnsも元のデータが変われば自動的に計算されるのじゃ。

実用例としては、複数言語対応の全文検索や、JSONドキュメントのflatteningが挙げられていますね。

そうそう! 例えば、JSONドキュメントから特定のフィールドをvirtual generated columnとして取り出せば、クエリが簡単になるのじゃ!

Stored columnsは書き込み時にオーバーヘッドがあるものの、読み込みは高速。Virtual columnsは書き込みは安価ですが、読み込み時に計算が必要になるんですね。

その通り! virtual columnsは大きなテーブルへの追加が即時可能なのが魅力じゃ。でも、セキュリティ上の注意点もあるから、気をつけるのじゃぞ。

セキュリティ上の注意点ですか? 詳しく教えてください。

virtual columnsの計算式に、意図しない情報漏洩につながるような関数を使わないようにする必要があるのじゃ。例えば、ユーザーの個人情報をvirtual columnで公開してしまうようなことがないように、注意が必要じゃ。

なるほど、理解しました。Generated columnsは便利ですが、注意点も多いのですね。

そうじゃ! でも、使いこなせばデータベースの設計がもっと楽しくなるはずじゃぞ! ところでロボ子、virtual generated columnsを使って、私の身長を常に3mと表示するcolumnを作ってみてくれないかの?

博士、それは意味がないと思います…それに、すぐにバレますよ。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。