主キーと外部キーに UUID を使用することにしたアプリケーションを開発しています。この目的のために、開発環境で正常に動作する拡張機能「uuid-ossp」を使用しました。
現在、テスト環境をインストールしています。データベースのセットアップは、お客様が作成したスクリプトによって課されます。構造は標準です: 管理者ユーザー、アプリケーション ユーザー、アプリケーション名前空間など。
管理者アカウントで拡張機能を作成できます。
$ psql mydb -U [admin_user]
mydb=# CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION
mydb=# select uuid_generate_v4();
uuid_generate_v4
--------------------------------------
23e45b57-a658-41a5-8661-0cc06568eff8
しかし、データベース アプリケーション ユーザーに接続すると、 uuid を生成できません。
$ psql mydb -U [app_user]
SELECT uuid_generate_v4();
mydb=> select uuid_generate_v4();
ERROR: function uuid_generate_v4() does not exist
admin_user と app_user の両方が同じデータベース上にあります。app_user は拡張機能を「見る」ことはできますが、使用することはできません。
bdd3001=> select * from pg_catalog.pg_extension;
extname | [...]
-----------+-
plpgsql | [...]
uuid-ossp | [...]
何か案は?