PostgreSQL: COUNT(*), pg_stat_user_tables, システムテーブル、外部ツールを使って全テーブルの行数を取得する
PostgreSQLで全テーブルの行数を取得する方法
COUNT(*) 関数を使う
これは最もシンプルで一般的な方法です。COUNT(*)
関数は、テーブル内のすべての行数をカウントします。
SELECT table_name, COUNT(*) AS row_count
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY row_count DESC;
このクエリは、public
スキーマ内のすべてのテーブルの名前と行数を取得し、行数が多い順に並べ替えます。
pg_catalog.pg_stat_user_tables
ビューは、各テーブルに関する統計情報を提供します。このビューを使って、各テーブルの行数を取得できます。
SELECT relname, n_live_tuples AS row_count
FROM pg_catalog.pg_stat_user_tables
ORDER BY row_count DESC;
システムテーブルを使う
PostgreSQLは、システムテーブルと呼ばれる特別なテーブル群を提供しています。これらのテーブルを使って、各テーブルの行数を取得できます。
SELECT schemaname, tablename, reltuples AS row_count
FROM pg_catalog.pg_tables
WHERE schemaname IN ('public', 'pg_catalog')
ORDER BY row_count DESC;
外部ツールを使う
pgstatstool
や psql
などの外部ツールを使って、全テーブルの行数を取得できます。
pgstatstool -d postgres -t -c
このコマンドは、postgres
データベース内のすべてのテーブルの名前と行数を表示します。
注意点
COUNT(*)
関数は、すべての行をカウントするため、大きなテーブルの場合、実行に時間がかかることがあります。pg_catalog.pg_stat_user_tables
ビューとシステムテーブルは、統計情報に基づいて行数を表示するため、実際の行数と一致しない場合があります。- 外部ツールを使う場合は、ツールの使用方法を理解する必要があります。
PostgreSQLで全テーブルの行数を取得するには、いくつかの方法があります。それぞれの方法にはメリットとデメリットがあるため、状況に合わせて最適な方法を選択する必要があります。
COUNT(*) 関数を使う
-- PostgreSQL 10以降
SELECT table_name, COUNT(*) AS row_count
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY row_count DESC;
-- PostgreSQL 9.6以前
SELECT tablename, COUNT(*) AS row_count
FROM pg_catalog.pg_tables
WHERE schemaname = 'public'
ORDER BY row_count DESC;
pg_catalog.pg_stat_user_tables ビューを使う
SELECT relname, n_live_tuples AS row_count
FROM pg_catalog.pg_stat_user_tables
ORDER BY row_count DESC;
システムテーブルを使う
SELECT schemaname, tablename, reltuples AS row_count
FROM pg_catalog.pg_tables
WHERE schemaname IN ('public', 'pg_catalog')
ORDER BY row_count DESC;
外部ツールを使う
pgstatstool -d postgres -t -c
PostgreSQLで全テーブルの行数を取得するその他の方法
PL/pgSQL 関数を使って、全テーブルの行数を取得するカスタム関数を作成できます。
CREATE FUNCTION get_row_count(tablename text) RETURNS integer AS
$$
DECLARE
row_count integer;
BEGIN
SELECT COUNT(*) INTO row_count FROM tablename;
RETURN row_count;
END;
$$ LANGUAGE plpgsql;
SELECT table_name, get_row_count(table_name) AS row_count
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY row_count DESC;
クエリツールを使う
- クエリツールに接続
- データベースを選択
- 全テーブルのリストを表示
スクリプトを使う
- スクリプトでデータベースに接続
postgresql count database-table