PostgreSQLで、各テーブルの更新日時を知る為の良い方法はありますか?

MySQLにある"SHOW TABLE STATUS"のように、一括でテーブルの情報を出力させる内部コマンド等ありましたら、ご教授お願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2006/10/19 16:50:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント35pt

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 の最適化で使用される大まかな推定値に過ぎない。 

とあります。

id:swd2000gt

ありがとうございます。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

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

2006/10/16 13:36:33
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント35pt

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


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


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

id:swd2000gt

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

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

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

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

2006/10/17 20:58:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません