Home > スポンサー広告 > PostgreSQLのデータファイルの判別方法

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Comments: -

Comment Form
サイト管理者にのみ通知する

Trackback+Pingback: -

TrackBack URL for this entry
http://hitai.blog72.fc2.com/tb.php/86-bc25c368
Listed below are links to weblogs that reference
スポンサーサイト from ヒビコレショウジン

Home > スポンサー広告 > PostgreSQLのデータファイルの判別方法

Home > PostgreSQL > PostgreSQLのデータファイルの判別方法

PostgreSQLのデータファイルの判別方法

  • Posted by: Nakunaru
  • 2011-06-16 Thu 23:04:10
  • PostgreSQL
PostgreSQLでは、各DBのディレクトリは$PGDATAの配下に作成されます。
(デフォルトではインストールdirのdata配下)

この時、各ディレクトリは名前が数値になっているため、どのDBのディレクトリなのか名前だけでは判別できません。
そこでちょっと調べてみました。


・見つけた判別方法1
http://d.hatena.ne.jp/hogem/20090620/1245431458#


SELECT datid, datname FROM pg_stat_database;

datid | datname
-------+------------
10793 | postgres
16406 | testdb2
16542 | testdb
1 | template1
10792 | template0


※datidがDBのディレクトリ名と一致する


SELECT relid, relname FROM pg_stat_all_tables;

relid | relname
-------+-------------------------
16492 | customer3
2601 | pg_am
10308 | pg_toast_2619
10750 | pg_toast_10748
2610 | pg_index
16410 | emp
2612 | pg_language
16436 | orditems
16427 | ord
2620 | pg_trigger
1214 | pg_shdepend
2608 | pg_depend
16456 | customer
・・・


※relidが各テーブルのデータファイル名と一致。
※pg_stat_databaseの配下から該当ファイルを探せばよい。
※INDEDXも同様にpg_stat_all_indexesで探すことができる。


・判別方法その2
oid2name ユーティリティを使用する。
http://www.postgresql.jp/document/8.4/html/oid2name.html

DBのディレクトリ判別


oid2name -U psadmin -P psadmin

Oid Database Name Tablespace
----------------------------------
16406 testdb2 pg_default
10793 postgres pg_default
10792 template0 pg_default
1 template1 pg_default
16542 testdb pg_default


※oidがディレクトリ名と一致


oid2name -U psadmin -P psadmin -d testdb2

Filenode Table Name
------------------------
16498 クワオメ・゙・ケ・ソ
16414 クワオメ・゙・ケ・ソ
16456 クワオメ・゙・ケ・ソ
16532 クワオメ・゙・ケ・ソ」イ
16448 クワオメ・゙・ケ・ソ」イ
16490 クワオメ・゙・ケ・ソ」イ
16534 クワオメ・゙・ケ・ソ」ウ
16450 クワオメ・゙・ケ・ソ」ウ
16492 クワオメ・゙・ケ・ソ」ウ


※filenodeがファイル名と一致
※ただし、DBのキャラセットとクライアントのキャラセットが一致してないと化ける

Windows版のPostgreSQLでは、キャラクタセットにSJISが指定できずEUCのため化けるようだ。

ということで、Windowsの場合は、以下の方法でもファイル名の判別ができる。


SELECT relfilenode as "Filenode", relname as "Table Name"
FROM pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_catalog.pg_database d ON d.datname = current_database(),
pg_catalog.pg_tablespace t
WHERE relkind IN ('r', 'i', 'S', 't') AND
t.oid = CASE
WHEN reltablespace <> 0 THEN reltablespace
ELSE dattablespace
END AND
(c.relname ~~ ANY (ARRAY['table_name']))
ORDER BY relname






おまけ。
Win環境ではoid2nameが綺麗に動かなかったので、ubuntu環境で試してみた。
ところが、ubuntuのパッケージマネージャでビルドしたPostgreSQLには、oid2nameが含まれていなかったため、以下の手順でソースパッケージからビルドして確認した。

まずはパッケージの入手

wget ftp://ftp2.jp.postgresql.org/pub/postgresql/source/v9.0.4/postgresql-9.0.4.tar.gz



展開

tar xvf ./postgresql-9.0.4.tar.gz



ビルド

$ ls
postgresql-9.0.4/ postgresql-9.0.4.tar.gz*
cd postgresql-9.0.4/contrib/oid2name
ls
Makefile oid2name.c
../../configure
make


これでoid2nameがビルドされてるのでこれを適当に使えばOKでした。


スポンサーサイト

Comments: 0

Comment Form
サイト管理者にのみ通知する

Trackback+Pingback: 0

TrackBack URL for this entry
http://hitai.blog72.fc2.com/tb.php/86-bc25c368
Listed below are links to weblogs that reference
PostgreSQLのデータファイルの判別方法 from ヒビコレショウジン

Home > PostgreSQL > PostgreSQLのデータファイルの判別方法

タグクラウド
Categories
Monthly
Recent Entries
Recent Comments
Recent Trackbacks
Appendix

Nakunaru

    Author:Nakunaru

    データベース(ORACLEとかSQL ServerとかDB2とかMySQLとか)とか技術者教育とかプログラムとか。
    気になる技術を少しずつ勉強していきます。


Return to page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。