エラーの内容一意の識別子を作成するための uuid-ossp や、曖昧検索(fuzzy searching)のための pg_trgm といった、PostgreSQL の人気のある機能を有効にしようとしているとします。しかし、成功メッセージが表示される代わりに、SQL コンソールには次のような赤文字のエラーが表示されます。
ERROR: extension "uuid-ossp" does not exist
これは、PostgreSQL がコアエンジンを軽量に保っているために発生します。多くの拡張機能は「標準的」なものですが、その実体となる物理ファイルは、デフォルトではインストールされない別のパッケージに含まれていることがよくあります。サーバーのライブラリディレクトリ(通常は /usr/lib/postgresql/<version>/lib/)に .so ファイルや .control ファイルが存在しない場合、Postgres はそれらが存在することを認識できません。
発生の原因PostgreSQL の拡張機能を動作させるには、ディスク上の物理ファイル、登録を行うためのスーパーユーザー権限、そして正しいデータベースコンテキストの 3 つが必要です。通常、このエラーは以下のいずれかの理由で発生します。
- Contrib パッケージの不足: 追加ツールのコレクションである「contrib」モジュールが、データベースの初期インストール時にスキップされた。- 接続先データベースの間違い: 実際のアプリケーション用データベースではなく、
postgresメンテナンス用データベースに接続している。- バージョンの不一致: PostgreSQL 14 用の contrib パッケージをインストールしたが、サーバーは実際にはバージョン 16 を実行している。## 解決手順### ステップ 1: PostgreSQL Contrib モジュールをインストールするほとんどの Linux ディストリビューションでは、PostgreSQL が複数のパッケージに分割されています。不足しているファイルを修正するには、使用しているバージョンに対応する特定の contrib バンドルをインストールする必要があります。
Ubuntu または Debian の場合:まず psql --version でバージョンを確認してください。バージョン 15 を使用している場合は、以下を実行します。
sudo apt-get update
sudo apt-get install postgresql-contrib-15
RHEL、CentOS、または AlmaLinux の場合:dnf または yum を使用して、対応するパッケージを取得します。
# PostgreSQL 16 の場合
sudo dnf install postgresql16-contrib
インストール後にデータベースサービス全体を再起動する必要はありませんが、すぐにインストールを確認する習慣をつけるのが良いでしょう。
ステップ 2: 拡張機能が利用可能か確認するインストールコマンドを再実行する前に、PostgreSQL がファイルを認識できるようになったか確認します。ターミナルで次のクエリを実行してください。
SELECT name, default_version, installed_version
FROM pg_available_extensions
WHERE name = 'uuid-ossp';
default_version 列に値(例: 1.1)が入っていれば、準備は完了です。installed_version が null の場合、その拡張機能は利用可能ですが、この特定のデータベースではまだ有効化されていません。
ステップ 3: 拡張機能を有効化する拡張機能はデータベースごとに設定されます。test_db で uuid-ossp を有効にしても、production_db で自動的に動作するわけではありません。対象のデータベースに切り替えて、作成コマンドを実行してください。
-- 特定のアプリ用データベースに接続
\c my_app_db
-- 拡張機能を登録
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
ステップ 4: Docker 環境での対応公式の postgres Docker イメージには、通常デフォルトで contrib モジュールが含まれています。しかし、-slim や -alpine タグを使用している場合は、それらが含まれていない可能性があります。常に存在するように、Dockerfile に次の行を追加してください。
FROM postgres:16
RUN apt-get update && apt-get install -y postgresql-contrib-16 && rm -rf /var/lib/apt/lists/*
クラウド環境(AWS RDS / Azure)での修正AWS RDS のようなマネージドサービスでは、OS レベルのパッケージをインストールすることはできません。幸いなことに、AWS にはすでにこれらのファイルが含まれています。RDS でこのエラーが発生する場合、通常は権限の問題です。ユーザーに rds_superuser ロールがあることを確認してください。特定の拡張機能(pg_partman など)については、RDS パラメータグループの shared_preload_libraries リストに拡張機能名を追加し、インスタンスを再起動する必要がある場合もあります。
検証: 修正のテストバージョン 4 の UUID を生成して、すべてが正常に動作していることを確認します。
SELECT uuid_generate_v4();
成功すると、次のような結果が表示されます: f47ac10b-58cc-4372-a567-0e02b2c3d479。この 36 文字の文字列が表示されれば、準備完了です。

