本文へ移動
runlot

拡張

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 だけで動きます。

既知の差異

すべての拡張がインストールでき、その役割を果たします。いくつかは自前のテストの一部が、単一プロセスの組み込みエンジンにないものを要求します。

拡張動作しない動作する
amcheckverify_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_tleALTER SYSTEM(postgresql.auto.conf がない)と、バックグラウンドワーカーで動く passcheck / clientauth フックTLE 拡張のインストールと実行、基底型、演算子、機能レジストリ
pgauditCREATE/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 は現在リストにありません。

独自の共有ライブラリを読み込むこともできず、今後も対応しません。プロジェクトごとのプロセスが分離の境界です。

このページの目次