人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PostgreSQLで、各テーブルの更新日時を知る為の良い方法はありますか?
MySQLにある"SHOW TABLE STATUS"のように、一括でテーブルの情報を出力させる内部コマンド等ありましたら、ご教授お願いします。

●質問者: swd2000gt
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:MySQL postgreSQL コマンド 教授 更新日
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●35ポイント

http://www.postgresql.jp/document/pg746doc/html/catalogs.html

PostgreSQL ではシステムカタログと言う形で内部情報を表示できます。

見かけは単なるテーブルなので、

SELECT * FROM pg_tables;

等と実行するだけです。

ただ、目的のテーブルの更新日時については見当たりませんでした。

数が多いので見落としているだけかもしれませんが。


以下は自分の推測になりますが、データベースのデータ構造の違いによりテーブルの更新日時はそもそも定義されていないのではないでしょうか。

MySQL の場合でも InnoDB を使用した場合の制限として

http://dev.mysql.com/doc/refman/4.1/ja/innodb-restrictions.html

SHOW TABLE STATUS から返される InnoDB テーブルの統計情報は、テーブルが確保している物理サイズを除いて正確ではない。 レコードのカウントは、SQL の最適化で使用される大まかな推定値に過ぎない。 

とあります。

◎質問者からの返答

ありがとうございます。MySQL4(MyISAM)では

Create_time: 2006-06-11 01:28:18

Update_time: 2006-10-16 13:22:32

Check_time: 2006-06-11 01:28:18

のように出力出来ましたので、似たような事が出来るのかな?と質問致しました次第です。

Postgresのデータ構造では元々更新日時を記録するような作りにはなっていないのでしょうか?

また、某所ではlsで出せ、との話もありますが

http://ibio.jp/index.php?MEMO%2FPostgreSQL

http://pc8.2ch.net/test/read.cgi/db/1079771059/16-17

これはテーブルに対応するファイルの更新日時で見るべきという事なのでしょうか。


2 ● b-wind
●35ポイント

MyISAM 形式は1テーブル1ファイルであり、かつ変更時刻等をファイル内に保持している為そのような表示が容易に出来るようになっていますが、これはどちらかというと珍しい方だと思います。


PostgreSQL ではトランザクションをサポートしているので、変更はまず、WAL (Oracle で言うREDOログ)に書き込まれるので、ls による表示は厳密なものではないと思います。(更新時間のみ)


なお、テーブルに対応するファイルがあるかどうかはマニュアルに記載が無く今試せる環境がないため分かりません。

◎質問者からの返答

なるほど…そういうことなんですね。

自分でも色々調べてみて、データファイル名とテーブル名の対応を見るコマンド(oid2name)があるとわかったので

コンパイルして試してみたのですが、必ずしもテーブルを編集した直後にファイルが更新されるわけではないようですね。

トランザクションが絡むと、厳密に調べるのはやはり難しいのでしょうか…

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ