PostgreSQL
高い拡張性と SQL 標準準拠を特徴とするオープンソース RDBMS
データベースSQL
PostgreSQL とは
PostgreSQL は、1996 年にリリースされたオープンソースの RDBMS で、SQL 標準への高い準拠度と豊富な拡張機能が特徴である。Amazon Aurora PostgreSQL 互換エディションや RDS for PostgreSQL として AWS でも広く使われている。
PostgreSQL の強み
| 特徴 | 説明 |
|---|---|
| 拡張性 | カスタム型、関数、インデックス、拡張モジュールを追加可能 |
| JSON サポート | jsonb 型でドキュメント DB 的な使い方も可能 |
| 全文検索 | tsvector / tsquery で日本語を含む全文検索 |
| ベクトル検索 | pgvector 拡張で埋め込みベクトルの類似検索 |
| パーティショニング | 宣言的パーティショニングで大規模テーブルを分割 |
| レプリケーション | ストリーミングレプリケーションで読み取りスケール |
MySQL との比較
| 観点 | PostgreSQL | MySQL |
|---|---|---|
| SQL 準拠 | 高い (Window 関数、CTE、LATERAL) | 中程度 (8.0 で改善) |
| JSON | jsonb (バイナリ、インデックス可) |
JSON 型 |
| 拡張性 | 拡張モジュール (PostGIS, pgvector) | プラグイン (限定的) |
| MVCC | 追記型 (VACUUM が必要) | undo ログ型 |
| デフォルト分離レベル | Read Committed | Repeatable Read |
| AWS サービス | Aurora PostgreSQL, RDS | Aurora MySQL, RDS |
PostgreSQL は複雑なクエリや拡張機能が必要な場合に強く、MySQL はシンプルな読み取り中心のワークロードで高速。
Aurora PostgreSQL
Aurora PostgreSQL 互換エディションは、PostgreSQL のエンジンを AWS のストレージ層に載せ替えたサービスで、標準 PostgreSQL の最大 3 倍のスループットを実現する。
- ストレージは 3 AZ に 6 コピーを自動レプリケーション
- 最大 15 のリードレプリカ
- Serverless v2 でオートスケーリング
- PITR (ポイントインタイムリカバリ) で任意の時点に復元
pgvector と RAG
pgvector 拡張を使えば、PostgreSQL をベクトル DB として利用できる。Aurora PostgreSQL も pgvector をサポートしており、既存の RDB に埋め込みベクトルを格納して RAG の検索基盤にできる。
CREATE EXTENSION vector;
CREATE TABLE documents (
id serial PRIMARY KEY,
content text,
embedding vector(1536) -- 1536次元のベクトル
);
-- 類似検索 (コサイン距離)
SELECT content
FROM documents
ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector
LIMIT 5;
専用のベクトル DB (OpenSearch Serverless) と比べて、既存の PostgreSQL インフラを流用できる利点がある。
よくある落とし穴
- VACUUM の放置: 追記型 MVCC のため、不要タプルが蓄積してテーブルが肥大化する。
autovacuumの設定を適切に調整する - コネクション枯渇: PostgreSQL はプロセスベースで、接続ごとにプロセスを生成する。Lambda のような大量同時接続には RDS Proxy を併用する
関連書籍も参考になる。