PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Obter o tamanho de várias tabelas em uma consulta POSTGRES?


A seguinte consulta de seleção retornará toda a tabela e seu tamanho
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;

Crie uma VIEW com este select
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;

e agora você pode consultar nesta visualização para obter o tamanho como este
SELECT mytable,size 
       FROM vTableAndSize WHERE mytable in ('table1','table2')

De acordo com Comentário do OP
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;

e obtenha a soma do tamanho de várias colunas usando
/* 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

Crie vTableAndSize_1 em seu PostgreSQL banco de dados e consulta como abaixo em seu front end(não estou familiarizado com Ruby )
ActiveRecord::Base.connection.execute("SELECT pg_size_pretty(sum(size)) FROM vTableAndSize_1 
WHERE mytable in ('table1','table2')")