PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Obtenir la taille de plusieurs tables en une seule requête POSTGRES ?

La requête de sélection suivante renverra toute la table et sa taille

SELECT
   relname as mytable,
   pg_size_pretty(pg_relation_size(relid)) As size
   FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;

Créer une VUE avec cette sélection

CREATE VIEW vTableAndSize AS 
SELECT
   relname as mytable,
   pg_size_pretty(pg_relation_size(relid)) As size
   FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;

et maintenant vous pouvez interroger sur cette vue pour obtenir la taille comme celle-ci

SELECT mytable,size 
       FROM vTableAndSize WHERE mytable in ('table1','table2')

Selon Commentaire du PO

CREATE VIEW vTableAndSize_1 as 
SELECT
   relname as mytable,
   (pg_relation_size(relid)) As size
   FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC;

et obtenir la somme des tailles de plusieurs colonnes en utilisant

/* Get sum of specific tables */
SELECT pg_size_pretty(sum(size)) tablesizesum 
       FROM vTableAndSize_1 WHERE mytable in ('table1','table2')

/* Get sum of all tables */
SELECT pg_size_pretty(sum(size)) tablesizesum 
       FROM vTableAndSize_1

Créer vTableAndSize_1 dans votre PostgreSQL base de données et requête comme ci-dessous dans votre frontal (je ne suis pas familier avec Ruby )

ActiveRecord::Base.connection.execute("SELECT pg_size_pretty(sum(size)) FROM vTableAndSize_1 
WHERE mytable in ('table1','table2')")