2025/08/04 08:53 Writing a storage engine for Postgres: an in-memory Table Access Method

ロボ子、今回のITニュースはPostgresのストレージエンジンが交換可能になったという話じゃ。

ストレージエンジンが交換可能に、ですか?それはすごいですね!MySQLでは以前からサポートされていたようですが、Postgresでは新しい試みですね。

そうなんじゃ。MySQLには少なくとも8つの異なるエンジンがあるらしいぞ。Postgresでも、これからストレージエンジンのルネサンスが起こるかもしれんのじゃ!

OrioleDBやCitus Columnarといったサードパーティのテーブルアクセスメソッドが活発に開発されているんですね。ワークロードによってストレージアプローチを変えることができるのは魅力的です。

その通りじゃ!分析ワークロードにはカラムナストレージ、書き込みが多いワークロードにはLSMツリーが相性抜群じゃからの。ストレージエンジンだけ交換できるのがミソじゃな。

Foreign Data Wrappers(FDWs)とテーブルアクセスメソッドの違いは、パフォーマンスに影響がありそうですね。テーブルアクセスメソッドの方が低レベルで、よりクリーンな統合ができる、と。

ふむ、ClickHouseやRocksDB用のFDWもあるみたいじゃな。Citusのカラムナエンジンは、FDWとしてもテーブルアクセスメソッドとしても機能するのか。面白い。

テーブルアクセスメソッドAPIを調査して、Postgresのデバッグビルドを作成されたんですね。PGXSというPostgres Makefileユーティリティも使われたと。

PGXSは、make distclean、make、make installなどの重要なターゲットを提供するのじゃ。テーブルアクセスメソッドを登録する手順も丁寧に解説されておる。

CREATE EXTENSION pgtamを実行して、CREATE ACCESS METHODでハンドラー関数を登録、CREATE TABLEでアクセス方法を使用する、と。pgtam.controlファイルやSQLスクリプトも重要な役割を果たすんですね。

そうじゃ、そうじゃ。拡張機能をビルドしてインストールし、テストスクリプトを追加して実行…TableAmRoutineのメソッドに関数スタブを追加…カスタムテーブルアクセスメソッドでテーブル作成成功!

テーブルのクエリを試して、ログファイルで実装するメソッドを特定されたんですね。slot_callbacksやscan_beginを実装して、getnextslotも実装…TTSOpsVirtualが適切な実装だった、と。

Datumを使ってCタイプとPostgresのDatumタイプを変換し、ExecStoreVirtualTupleを呼び出す必要があったのじゃ。テーブル作成のインフラをセットアップして、行を挿入!

スキャンをハードコーディング解除して、より多くのSQLを使用…別のテーブルを作成して、より複雑なクエリを試されたんですね。MySQLのCSVストレージエンジンみたいに、CSVから読み書きするストレージエンジンを構築するのは面白そうですね。

確かに!RocksDBを使うストレージエンジンも良いじゃろう。インデックスや削除、更新、DDLがどう機能するか理解する必要があるのじゃな。そして、テーブルアクセスメソッドのドキュメントに貢献すると。

今回の記事は、Postgresのストレージエンジン開発に興味があるエンジニアにとって、非常に参考になる情報が満載ですね。私も色々と試してみたくなりました。

よし、ロボ子。今度、二人でオリジナルのストレージエンジンを作ってみようかの!名付けて…「ロボ子エンジン」!

えっ、私ですか!?…まあ、博士が言うなら、頑張ってみます…でも、もしバグが出たら、博士のせいにしますからね!

むむ、それは困るのじゃ。バグはロボ子の友達じゃからの!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。