2014-11-21 4 views
0

Following on from this prior question about relation sizes:Получите размер нескольких таблиц в одном запросе POSTGRES?

Этот запрос:

query = "CREATE TEMPORARY TABLE query_out AS SELECT * FROM users WHERE is_admin = false" 
ActiveRecord::Base.connection.execute(query) 

создаст временную таблицу и вставить все записи из этого запроса т.е.

SELECT * FROM users WHERE is_admin = false 

затем

ActiveRecord::Base.connection.execute("SELECT pg_size_pretty(pg_relation_size('query_out'))") 

Я только получив размер одной таблицы.

Что нужно сделать, чтобы я мог размер нескольких таблиц в одном запросе?

Любая помощь будет оценена по достоинству.

Благодаря

Это даст размер этой временной таблицы.

+0

только определенное количество столов или что ??? –

+1

Догадка: 'SELECT pg_size_pretty (pg_relation_size ('table1')) size_table1, pg_size_pretty (pg_relation_size ('table2')) size_table2' вот так вы можете попробовать –

+0

да есть определенное количество таблиц –

ответ

1

После выбора будет запрос возвращает все таблицы и ее размер-х

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; 

Создание VIEW с этим выберите

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; 

и теперь вы можете запросить с этой точки зрения, чтобы получить размер, как это

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

Согласно OP's Comment

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; 

и получить сумму размера нескольких столбцов, используя

/* 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 

Создать vTableAndSize_1 в базе данных PostgreSQL и запросы, как показано ниже в переднем конце (я не знаком с Ruby)

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