【PostgreSQL-0016】uuid-osspのセットアップ

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が使える状態にはなっていないので、別途セットアップする必要があります。

UUIDとは

UUIDとはUniversally Unique Identifierの略です。詳しくは、下記のWikiを参考にして下さい。

iDempiereでは、基本的にすべてのテーブルのすべてのレコードにUUIDが割り当たっており、iDempiere内でレコードを一意に識別できるようになっています。

iDempiereのUUID
iDempiereのUUID

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が表示されれば完了です。