Подтвердить что ты не робот

Список postgresql и таблицы заказов по размеру

Есть ли простой способ перечислить все таблицы из базы данных PostgreSQL и заказать их по размеру?

Псевдо-код

SELECT * FROM tables
ORDER by tables.size

Я использую PostgreSQL 9.3.2.

4b9b3361

Ответ 1

select table_name, pg_relation_size(quote_ident(table_name))
from information_schema.tables
where table_schema = 'public'
order by 2

Здесь показан размер всех таблиц в схеме public, если у вас несколько схем, вы можете использовать:

select table_schema, table_name, pg_relation_size('"'||table_schema||'"."'||table_name||'"')
from information_schema.tables
order by 3

Пример SQLFiddle: http://sqlfiddle.com/#!15/13157/3

Список всех функций размера объекта в руководстве.

Ответ 2

Это покажет вам имя схемы, имя таблицы, размер и размер (необходимо для сортировки).

SELECT
  schema_name,
  relname,
  pg_size_pretty(table_size) AS size,
  table_size

FROM (
       SELECT
         pg_catalog.pg_namespace.nspname           AS schema_name,
         relname,
         pg_relation_size(pg_catalog.pg_class.oid) AS table_size

       FROM pg_catalog.pg_class
         JOIN pg_catalog.pg_namespace ON relnamespace = pg_catalog.pg_namespace.oid
     ) t
WHERE schema_name NOT LIKE 'pg_%'
ORDER BY table_size DESC;

Я построю это на основе приведенных здесь решений списка схем с размерами (относительный и абсолютный) в базе данных PostgreSQL

Ответ 3

Это будет более понятно.

pg_size_pretty(<numeric_value>) - преобразует байты no.of в понятный человеку формат.

pg_database_size(<db_name>) - получает размер базы данных в байтах.

pg_total_relation_size(<relation_name>) - получает общий размер таблицы и ее индекс в байтах.

pg_relation_size(<relation_name>) - получает размер отношения в байтах.

pg_index_size(<relation_name>) - получает размер индекса отношения в байтах.

current_database() - получает текущую используемую базу данных, в которой выполняется этот запрос.

Запрос:

select current_database() as database,
       pg_size_pretty(total_database_size) as total_database_size,
       schema_name,
       table_name,
       pg_size_pretty(total_table_size) as total_table_size,
       pg_size_pretty(table_size) as table_size,
       pg_size_pretty(index_size) as index_size
       from ( select table_name,
                table_schema as schema_name,
                pg_database_size(current_database()) as total_database_size,
                pg_total_relation_size(table_name) as total_table_size,
                pg_relation_size(table_name) as table_size,
                pg_indexes_size(table_name) as index_size
                from information_schema.tables
                where table_schema=current_schema() and table_name like 'table_%'
                order by total_table_size
            ) as sizes;

Результат:

 database  | total_database_size | schema_name | table_name | total_table_size | table_size | index_size
-----------+---------------------+-------------+------------+------------------+------------+------------
 vigneshdb | 1586 MB             | corpdata    | table_aaa  | 16 kB            | 0 bytes    | 8192 bytes
 vigneshdb | 1586 MB             | corpdata    | table_bbb  | 24 kB            | 0 bytes    | 16 kB
 vigneshdb | 1586 MB             | corpdata    | table_ccc  | 640 kB           | 112 kB     | 488 kB
 vigneshdb | 1586 MB             | corpdata    | table_ddd  | 9760 kB          | 3152 kB    | 6568 kB
 vigneshdb | 1586 MB             | corpdata    | table_eee  | 1120 MB          | 311 MB     | 808 MB

Гуманизированный формат представлен в bytes, kB, MB, GB и TB.

bytes в kB - начинается с 10240 bytes

bytes в MB - начинается с 10485248 bytes= 10239.5 kB ~ 10 MB

bytes в GB - начинается с 10736893952 bytes= 10239.5 MB ~ 10 BG

bytes в TB - начинается с 10994579406848 bytes= 10239.5 GB ~ 10 TB

Все преобразования единиц начинаются с 10 + <unit>.

Для справки - Официальная документация Postgres

Ответ 5

select table_name,n_live_tup, pg_size_pretty(pg_relation_size(table_name))
from information_schema.tables
inner join pg_stat_user_tables  on table_name=relname
where table_schema = 'public'
order by 2 desc

Другая альтернатива

Ответ 6

 select uv.a tablename, pg_size_pretty(uv.b) sizepretty 
 from (select tb.tablename a, pg_table_size('schemaname.'||tb.tablename::text) b 
        from pg_tables tb 
        where tb.schemaname ilike 'schemaname' 
        order by 2 desc
       ) uv