MySQLにある"SHOW TABLE STATUS"のように、一括でテーブルの情報を出力させる内部コマンド等ありましたら、ご教授お願いします。
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 の最適化で使用される大まかな推定値に過ぎない。
とあります。
MyISAM 形式は1テーブル1ファイルであり、かつ変更時刻等をファイル内に保持している為そのような表示が容易に出来るようになっていますが、これはどちらかというと珍しい方だと思います。
PostgreSQL ではトランザクションをサポートしているので、変更はまず、WAL (Oracle で言うREDOログ)に書き込まれるので、ls による表示は厳密なものではないと思います。(更新時間のみ)
なお、テーブルに対応するファイルがあるかどうかはマニュアルに記載が無く今試せる環境がないため分かりません。
なるほど…そういうことなんですね。
自分でも色々調べてみて、データファイル名とテーブル名の対応を見るコマンド(oid2name)があるとわかったので
コンパイルして試してみたのですが、必ずしもテーブルを編集した直後にファイルが更新されるわけではないようですね。
トランザクションが絡むと、厳密に調べるのはやはり難しいのでしょうか…
ありがとうございます。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
これはテーブルに対応するファイルの更新日時で見るべきという事なのでしょうか。