CentOSなどLinuxディストリビューションのいくつかのOSで、マイグレーションスクリプトを実行すると、下記のようなエラーが出力される事があります。
ERROR: function uuid_generate_v4() does not exist
LINE 1: SELECT uuid_generate_v4()::char(36)
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
QUERY: SELECT uuid_generate_v4()::char(36)
CONTEXT: PL/pgSQL function generate_uuid() line 4 at RETURN
SQL statement "INSERT INTO ad_migrationscript
(isapply, scriptroll, ad_migrationscript_uu,
status, projectname, releaseno,
name, filename, ad_client_id,
ad_org_id, created, createdby,
updated, updatedby, isactive,
ad_migrationscript_id)
VALUES
('Y', 'N', generate_uuid(),
'CO', 'iDempiere', (select releaseno from ad_system),
p_script, 'postgresql/'||p_script, 0,
0, now(), 100,
now(), 100, 'Y',
nextidfunc(53081,'N'))"
PL/pgSQL function register_migration_script(character varying) line 18 at SQL statement
これは、PostgreSQLでuuid-osspが使える状態ではない事によるエラーとなっています。
そのためuuid-osspをセットアップして使える状態にする必要があります。
このコンテンツでは、PostgreSQLでuuid-osspをセットアップする方法について調査及び研究し、その成果をまとめています。
uuid-osspとは
uuid-osspとは、PostgreSQLで、UUIDを生成するためのモジュールです。
CentOSをはじめとして、いくつかのLinuxディストリビューションでは、PostgreSQLをインストールしても、uuid-osspが使える状態にはなっていないので、別途セットアップする必要があります。
iDempiereでは、基本的にすべてのテーブルのすべてのレコードにUUIDが割り当たっており、iDempiere内でレコードを一意に識別できるようになっています。
UUIDのセットアップの確認
SELECTでの確認
次のSQLを実行して、エラーが出るようだと、uuid_osspはまだ使える状態ではありません。
# SELECT uuid_generate_v4();
エラー:
ERROR: function uuid_generate_v4() does not exist
LINE 1: SELECT uuid_generate_v4();
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
◆イメージ
使用できるエクステンションの確認
次のSQLを実行して、使用できるエクステンションの一覧にuuid-osspが含まれているかどうか確認します。
SELECT * FROM pg_available_extensions;
◆イメージ
uuid-osspの文字は見当たりません…。
contribの確認
インストールしているPostgreSQLのcontribを確認します。
sudo yum list | grep postgres
これを試している環境は、PostgreSQL11です。
ですので、postgresql11-contrib.x86_64 が該当するcontribです。
contribのインストール
確認したcontribをインストールします。
sudo yum install postgresql11-contrib.x86_64
インストールしたcontribの確認
SELECT * FROM pg_available_extensions;
一番下に、uuid-osspがありました。
有効化
CREATE EXTENSION "uuid-ossp";
動作確認
# SELECT uuid_generate_v4();
UUIDが表示されれば完了です。