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 を併用する

関連書籍も参考になる。

関連用語