PostgreSQLエラーの修正方法:extension "uuid-ossp" does not exist

intermediate🐘 PostgreSQL2026-07-09| Linux (Ubuntu, Debian, CentOS, AlmaLinux)、Dockerコンテナ、またはマネージドクラウド (AWS RDS、Azure Database for PostgreSQL) 上の PostgreSQL 10 から 16。

Error Message

ERROR: extension "uuid-ossp" does not exist

エラーの内容一意の識別子を作成するための 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_dbuuid-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 文字の文字列が表示されれば、準備完了です。

プロのヒントとよくある落とし穴### タイポ(打ち間違い)を確認する基本的なことのように思えますが、これはよくある罠です。例えば、pg_trgm (Trigram) は頻繁に pg_tgrm と打ち間違えられます。CREATE EXTENSION が失敗した場合は、pg_available_extensionsname 列と照らし合わせて、スペルを再確認してください。

PostgreSQL 13 以降のネイティブ UUID基本的な UUID v4 の生成だけが必要で、PostgreSQL 13 以降を使用している場合は、実際にはもう uuid-ossp は必要ありません。組み込み関数の gen_random_uuid() を使用できます。こちらの方が高速で、拡張機能も不要です。

便利なツールUUID の問題をデバッグしたり、テストスイートを構築したりする際、データベースの外部で有効な UUID を生成する必要があることがよくあります。私はこの オンライン UUID ジェネレーター を使用しています。SQL シェルに戻ることなく、設定ファイルや curl リクエスト用の一意の ID を素早く取得するのに便利です。ブラウザ上で完全に動作するため、データはプライベートに保たれます。

バージョンのアップグレードメジャーバージョンのアップグレード(例: 14 から 16)を行ったばかりの場合、古い contrib パッケージは動作しません。常に postgresql-contrib-X のバージョンが SELECT version(); の出力と正確に一致していることを確認してください。

Related Error Notes