拡張
pgvector、pg_trgm、hstore、pgcrypto、pgaudit など、RDS for PostgreSQL 18 のリストの大半にあたる 44 の拡張がエンジンに組み込まれています。CREATE EXTENSION で有効にします。
拡張はエンジンにコンパイルされて組み込まれています。PostgreSQL と同じようにプロジェクトが CREATE EXTENSION で有効にするだけで、別途インストールしたり共有ライブラリを読み込んだりする必要はありません。リストは RDS for PostgreSQL 18 が公開しているものに沿い、単一プロセスの組み込みエンジンが載せられないものは除いています(このページの末尾を参照)。
CREATE EXTENSION vector;
CREATE EXTENSION pg_trgm;各拡張の自前の回帰テストを、同じ拡張を組み込んだ参照 PostgreSQL 18.6 と比較して実行しており、このページに記した例外を除いて出力はバイト単位で一致します。
組み込まれている拡張
| 領域 | 拡張 |
|---|---|
| テキスト検索・マッチング | pg_trgm 1.6 · pg_bigm 1.2 · pg_similarity 1.0 · fuzzystrmatch 1.2 · unaccent 1.1 · citext 1.8 · prefix 1.2 · dict_int 1.0 · dict_xsyn 1.0 |
| ベクトル・データ型 | vector (pgvector) 0.8.7 · hstore 1.8 · ltree 1.3 · cube 1.5 · earthdistance 1.2 · seg 1.4 · isn 1.3 · ip4r 2.4 · intarray 1.5 · hll 2.21 · roaringbitmap 1.3 · uuid-ossp 1.1 · lo 1.2 |
| インデックス・プランニング | btree_gin 1.3 · btree_gist 1.8 · bloom 1.0 · hypopg 1.4.3 · tsm_system_rows 1.0 · tsm_system_time 1.0 · amcheck 1.5 · pageinspect 1.13 · pg_hint_plan 1.8.1 · auto_explain |
| ユーティリティ | pgcrypto 1.4 · tablefunc 1.0 · orafce 4.17 · pg_partman 5.5 · pgtap 1.3.5 · tcn 1.0 · autoinc 1.0 · insert_username 1.0 · moddatetime 1.0 · refint 1.0 |
| 監査・拡張ホスティング | pgaudit 18.0 · pg_tle 1.5.3 |
有効にする方法
ほとんどはデータベースごとに一度 CREATE EXTENSION 名前; を実行するだけです。通常の DDL 文なので、他のスキーマ変更と同様にマイグレーションに入れてください。
2 つは拡張ではなくモジュールで、CREATE EXTENSION がありません。必要なセッションで読み込んでください。
LOAD 'pg_hint_plan';
LOAD 'auto_explain';LOAD はそのセッションの間だけ有効です。env.db を使う場合は先にセッションを読んでください。既定では呼び出しごとに新しいセッションです。pg_hint_plan には hint_plan.hints テーブル用の CREATE EXTENSION pg_hint_plan もありますが、コメントに書くヒントは LOAD だけで動きます。
既知の差異
すべての拡張がインストールでき、その役割を果たします。いくつかは自前のテストの一部が、単一プロセスの組み込みエンジンにないものを要求します。
| 拡張 | 動作しない | 動作する |
|---|---|---|
amcheck | verify_heapam — 8 kB のヒープページを読むが、ここではテーブル行がヒープページとして保存されていない | bt_index_check、bt_index_parent_check |
pageinspect | ヒープページ関数(heap_page_items、テーブルに対する get_raw_page) | すべてのインデックスページ関数 — bt_page_items、gin_*、brin_*、page_header、fsm_page_contents |
pg_hint_plan | デバッグトレースの文番号が一部異なる | ヒントは適用され、プランは PostgreSQL のもの |
pg_partman | バックグラウンドワーカー(pg_partman_bgw) — 第 2 のプロセスがない | それ以外すべて。run_maintenance() を自分で呼んでください(例: runlot cron) |
pg_tle | ALTER SYSTEM(postgresql.auto.conf がない)と、バックグラウンドワーカーで動く passcheck / clientauth フック | TLE 拡張のインストールと実行、基底型、演算子、機能レジストリ |
pgaudit | CREATE/ALTER/DROP DATABASE の監査 — プロジェクトごとにデータベースは 1 つ | それ以外すべて。pgaudit.log を設定すると監査行がプロジェクトのログに出ます |
pgvector: HNSW インデックスが修復されるタイミング
削除後の HNSW インデックスは VACUUM が修復しますが、この修復は高コストです — 10 万行のうち 1 % を削除した場合で約 46 秒。そのため毎時のメンテナンス sweep は HNSW インデックスを持つテーブルに触れず、プロジェクトがアイドルになって park されるときに、テーブルあたり 10 分の予算で修復します。プロジェクトが一度もアイドルにならない場合、それまで削除済みの行が残ります。インデックスは正しく応答し、サイズが縮まないだけです。削除が頻繁でプロジェクトが常に忙しいなら、修復コストが B-tree と同じ IVFFlat を使ってください。
env.vectors はこれとは無関係にそのままです。該当ページに記したとおり、独自のストアと正確検索を維持します。pgvector はあなた自身の SQL から使えます。
含まれていないものと、その理由
エンジンはプロジェクトごとにプロセス 1 つ、データベース 1 つです。第 2 のプロセスが必要なものは保留ではなく設計上の対象外です。実際のバックグラウンドワーカーループを持つ拡張(pg_cron、TimescaleDB)、論理デコーディング出力プラグイン(pglogical、wal2json)、独自の libpq を持つ拡張、PL/Perl と PL/Python、libxml ベースの拡張、WAL や pg_control の検査がこれに当たります。PostGIS は現在リストにありません。
独自の共有ライブラリを読み込むこともできず、今後も対応しません。プロジェクトごとのプロセスが分離の境界です。