Requête pour toutes les tables de la base :
| SELECT string_agg( format( $$ SELECT %L AS schema_name, %L AS table_name, COUNT(*)::bigint AS exact_row_count, pg_size_pretty(pg_total_relation_size(%L::regclass)) AS total_size FROM %I.%I $$, n.nspname, c.relname, (quote_ident(n.nspname) || '.' || quote_ident(c.relname)), n.nspname, c.relname ), ' UNION ALL ' ) AS qry FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind = 'r' AND n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname NOT LIKE 'pg_toast%' AND has_table_privilege(format('%I.%I', n.nspname, c.relname), 'SELECT'); \gexec |
Requêtes pour les tables ayant un certain nom :
| SELECT string_agg( format( $$ SELECT %L AS schema_name, %L AS table_name, COUNT(*)::bigint AS exact_row_count, pg_size_pretty(pg_total_relation_size(%L::regclass)) AS total_size FROM %I.%I $$, n.nspname, c.relname, (quote_ident(n.nspname) || '.' || quote_ident(c.relname)), n.nspname, c.relname ), ' UNION ALL ' ) AS qry FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind = 'r' AND c.relname LIKE '<nom_table>%'; \gexec |
Requête pour une seule table :
1ière méthode :
SELECT
current_schema() AS schema_name,
'<nom_table>' AS table_name,
COUNT(*)::bigint AS exact_row_count,
pg_size_pretty(pg_total_relation_size('<nom_schema>.<nom_table>'::regclass)) AS total_size
FROM <nom_schema>.<nom_table>;2ième méthode :
SELECT
string_agg(
format(
$$
SELECT
%L AS schema_name,
%L AS table_name,
COUNT(*)::bigint AS exact_row_count,
pg_size_pretty(pg_total_relation_size(%L::regclass)) AS total_size
FROM %I.%I
$$,
n.nspname,
c.relname,
(quote_ident(n.nspname) || '.' || quote_ident(c.relname)),
n.nspname,
c.relname
),
' UNION ALL '
) AS qry
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
AND c.relname = '<nom_table>'
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND n.nspname NOT LIKE 'pg_toast%'
AND has_table_privilege(format('%I.%I', n.nspname, c.relname), 'SELECT');
\gexec3ieme méthode moins précise :
SELECT
n.nspname AS schema_name,
c.relname AS table_name,
c.reltuples::bigint AS row_estimate,
pg_size_pretty(pg_total_relation_size(format('%I.%I', n.nspname, c.relname)::regclass)) AS total_size
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
AND c.relname = '<nom_table>'
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY total_size DESC;