[解決済み] Postgres の全テーブルの行数を求めるには?
質問
Postgresの全テーブルの行数を調べる方法を探しています。 一度に1つのテーブルを検索することができます。
SELECT count(*) FROM table_name;
しかし、すべてのテーブルの行数を確認し、その行数で並べ替えることで、すべてのテーブルの大きさを把握したいのです。
どのように解決するのですか?
この種のカウントを得るには3つの方法があり、それぞれにトレードオフがあります。
もし、真のカウントをしたいのであれば、各テーブルに対して使用したようなSELECT文を実行する必要があります。 これは、PostgreSQLが行の可視性情報を他の場所ではなく、行自体に保持しているためです。したがって、正確なカウントは何らかのトランザクションとの相対関係でしかありえません。 つまり、トランザクションが実行された時点で、そのトランザクションが見ているものをカウントしているのです。 これをデータベース内のすべてのテーブルに対して実行するように自動化することもできますが、そのような精度は必要ないでしょうし、それほど長く待つ必要もないでしょう。
2つ目の方法は、統計情報コレクターが、いつでも何行が"live"(削除されておらず、後の更新によって陳腐化されていない)かをおおよそ追跡していることに着目するものです。 この値は、アクティビティが激しい場合には少しずれることがありますが、一般的には良い推定値となります。
SELECT schemaname,relname,n_live_tup
FROM pg_stat_user_tables
ORDER BY n_live_tup DESC;
これはまた、死んでいる行の数を示すことができ、それ自体、監視するのに興味深い数字です。
3つ目の方法は、PostgreSQL 8.3以降、テーブルの統計情報を更新するためにautovacuumプロセスによって定期的に実行されるシステムのANALYZEコマンドが、行の推定値も計算することに注目することです。 それをこのように取得することができます。
SELECT
nspname AS schemaname,relname,reltuples
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE
nspname NOT IN ('pg_catalog', 'information_schema') AND
relkind='r'
ORDER BY reltuples DESC;
これらのクエリのうち、どちらを使うのが良いかは一概には言えません。 通常、私はpg_classの内部とpg_stat_user_tablesの内部のどちらでより有用な情報を使用したいかに基づいて決定します。 一般的にどの程度の規模であるかを確認するための基本的な集計目的であれば、どちらでも十分な精度が得られるはずです。
関連
-
[解決済み] psql: FATAL: データベース "<user>" が存在しない
-
[解決済み] リスト項目の出現回数を数えるにはどうしたらいいですか?
-
[解決済み] JavaScriptでオブジェクトのキー/プロパティの数を効率的にカウントする方法
-
[解決済み] TSQLを使用してデータベース内のすべてのテーブルのリストを取得するにはどうすればよいですか?
-
[解決済み] PostgreSQLで更新+結合を行うには?
-
[解決済み] PostgreSQLデータベースへのSQLダンプのインポート
-
[解決済み] SQLデータベースのテーブルでn番目の行を選択する方法は?
-
[解決済み] Postgres で、あるデータベースから別のデータベースにテーブルをコピーする
-
[解決済み] Postgres / PostgreSQLのテーブルとインデックスのディスクサイズはどのように見つけるのですか?
-
[解決済み] PostgreSQLでタイムスタンプの差を秒単位で求める
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
postgresのjsonbプロパティの利用について
-
Postgresqlの行から列への高度な応用と要約のアイデア
-
Postgresqlの高度なアプリケーションは、セルのアイデアをマージするの詳細
-
PostgreSQLにおけるsequence、serial、identityの使い方の違いについて
-
[解決済み] Postgres ENUMデータ型またはCHECK CONSTRAINT?
-
[解決済み] PostgreSQL 自動インクリメント
-
[解決済み] PostgresでInsert文のUUIDを生成する?
-
[解決済み] PostgreSQL の 'group by' クエリで、文字列フィールドの文字列を連結する方法は?
-
[解決済み] PostgreSQL用GUIツール【終了】のお知らせ
-
[解決済み] すべてのテーブルから特定の値を検索する方法(PostgreSQL)