hide98's blog

くうねるあそぶ。で過ごしたい。が。

PostgreSQLでテーブルと行数、データサイズの一覧を取得する。

VACUUM FULLとREINDEXを行った後に行うのが吉。

SELECT
    c.relname as "Name",
    CASE
        c.relkind
        WHEN 'r' THEN 'テーブル'
        WHEN 'v' THEN 'ビュー'
        WHEN 'i' THEN 'インデックス'
        WHEN 'S' THEN 'シーケンス'
        WHEN 's' THEN 'スペシャル'
    END AS "Type",
    reltuples as rows,
    pg_relation_size(relname) as bytes
FROM
    pg_catalog.pg_class c
    JOIN
        pg_catalog.pg_roles r ON r.oid = c.relowner
    LEFT JOIN
        pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
    c.relkind IN ('r','v','S','i','') AND
    n.nspname NOT IN ('pg_catalog', 'pg_toast') AND
    pg_catalog.pg_table_is_visible(c.oid)
ORDER BY
    relkind, relname;