2014年

12月

05日

【PostgreSQL‐0002】iDempiereのデータベースのoidを確認する

 PostgreSQLで作成したiDempiereアイデンピエレ)のデータベースは、PostgreSQLのインストールフォルダの”base”フォルダ(ディレクトリ)内に作成されます。

 widnwos環境であれば、"C:\Program Files\PostgreSQL\X.X\data\base"の様なフォルダ階層になっていると思います。

 ※"X.X"はバージョン番号

 しかし、この”base”フォルダ(ディレクトリ)にあるのは、番号が付されているフォルダ(ディレクトリ)で、どれがiDempiereのデータベースのフォルダ(ディレクトリ)なのかわかりません。

baseフォルダの下には、データベース毎にフォルダが作成されています。
baseフォルダの下には、データベース毎にフォルダが作成されています。

 そこで、記念すべきCompiere Distribution LabのPostgreSQL Labの第1回目の研究日誌として、iDempiereのデータベースが格納されているフォルダ(ディレクトリ)の確認方法について、調査及び研究し、その成果をまとめておきたいと思います。

PostgreSQLへの接続

 "psql"コマンドを使ってPostgreSQLに接続します。

psql -h localhost -d idempiere -U adempiere

 ※オプション

  • -h…ホスト名
  • -d…データベース名
  • -U…ユーザー名

データベースのOID(Object ID)を確認する

 "base"フォルダ(ディレクトリ)にあるフォルダ(ディレクトリ)の数値は、データベースのOID(Object ID)です。なので、データベースのOIDが分かれば、どのフォルダ(ディレクトリ)にiDempiereのデータベースのデータが格納されているのかわかります。

idempiere=# SELECT datname, oid FROM pg_database WHERE datname ='idempiere';

実行結果
実行結果

pg_database

 "pg_database"には使用可能なデータベースが格納されています。詳しくは下記を参照して下さい。

"base"にあるファイルとデータベースのテーブルを対応させる

 iDempiereのデータベースのbaseフォルダ(ディレクトリ)の中には、多くのファイルが格納されています。

iDempiereデータベースのフォルダに格納されているファイル
iDempiereデータベースのフォルダに格納されているファイル

 ファイル名は番号になっていますが、この番号が1つのテーブルに該当しています。例えば、次のSQLで受注伝票ヘッダ(C_Orderテーブル)のデータが格納されているファイルを確認する事ができます。

SELECT relname, relfilenode FROM pg_class WHERE relname = 'c_order';

 下記の実行結果では、"C_Order"テーブルは、314627のファイルであることが確認できます。

実行結果
実行結果

便利なpg_relation_filepath()関数(PostgreSQL9.0以降)

 PostgreSQL9.0以降は、pg_relation_filepath()関数でテーブル名を指定する事で、そのテーブルが対応するファイルのパスを表示してくれるので、テーブルのOIDとテーブルに対応するファイルの両方を一度に確認する事ができます。

SELECT pg_relation_filepath('c_order');

実行結果
実行結果

参考文献

PostgreSQL全機能バイブル

 全機能バイブルというだけあって、たぶん全機能が書かれているのだと思いますが、1つ1つの機能の説明は、中上級者向けなんだろうな~と思います。説明が難しい所や、わからない個所は、この本を片手にググって調べる必要はありますが、postgreSQLの全機能をコンパクトに無駄なく説明しているので、PostgreSQLの機能を目次的に把握するのにはとても良いと思います。