Hay una manera fácil a la lista de todas las tablas de la base de datos PostgreSQL y el orden por tamaño?

Pseudo-código

SELECT * FROM tables
ORDER by tables.size

Estoy usando PostgreSQL 9.3.2.

  • Si usted está usando la línea de comandos psql cliente, a continuación, un simple \d+ le mostrará esta información, aunque sin clasificar.
  • Gracias. Pero necesito que estén ordenados, tengo demasiadas tablas.
  • La gente que busca lo mismo, pero para bases de datos en lugar de tablas : aquí está la solución.
  • Re psql: comenzar con –eco-oculto y le dirá las consultas realizadas por \d+ y otros de barra diagonal inversa comandos. Fácil de añadir la clasificación.

6 Comentarios

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

    Esto demuestra que el tamaño de todas las tablas en el esquema public si usted tiene varios esquemas, puede que desee utilizar:

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

    SQLFiddle ejemplo: http://sqlfiddle.com/#!15/13157/3

    Lista de todos los objetos de tamaño de funciones en el manual:

    https://www.postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE

    • No funciona: gist.github.com/maciejkowalski/e306cfb8e31a41308bdf
    • Es table_schema, no schema_name. La primera consulta fue bien, pero que ya había comenzado a escribir algo en su psql sesión, lo que provocó un error de sintaxis.
    • lo siento, error tipográfico en la segunda consulta.
    • ACEPTAR este código funciona: select table_schema, table_name, pg_relation_size(table_schema||'.'||table_name) from information_schema.tables order by 3; gracias por la ayuda!
    • alguna idea de lo que esto no funciona en mi caso? stackoverflow.com/questions/40977776/…
    • no trabajo» no es válido Postgres mensaje de error. La consulta en mi respuesta no funciona para mí: rextester.com/KGKPR49004
    • Me da cero filas cuando ejecuto la primera consulta. select * from information_schema.tables where table_schema = 'public'; rendimientos cero filas aunque \dn muestra el esquema de público. Tal vez un cambio en el 9,5 causó esto?

  2. 54

    Esto le mostrará el nombre del esquema, el nombre de la tabla de tamaño bastante y tamaño (necesario para la especie).

    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;

    Voy a construir esta basado en las soluciones a partir de aquí lista de esquema con dimensiones (relativa y absoluta) en una base de datos PostgreSQL

    • También funciona +1, pero @a_horse_with_no_name era más rápido, así que voy a aceptar su respuesta. 🙂
    • Se basa en realidad en un post de @a_horse_with_no_name. Acabo de enmendadas para mis necesidades.
  3. 11

    Esto será más claro.

    pg_size_pretty(<numeric_value>) – convierte no.de bytes a formato legible.

    pg_database_size(<db_name>) – obtiene el tamaño de la base en bytes.

    pg_total_relation_size(<relation_name>) – obtiene el tamaño total de la tabla y su índice en bytes.

    pg_relation_size(<relation_name>) – obtiene la relación de tamaño en bytes.

    pg_index_size(<relation_name>) – obtiene el tamaño de índice de la relación en bytes.

    current_database() – obtiene la actualidad se utiliza la base de datos en la que esta consulta se realiza.

    Consulta:

    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;

    Resultado:

     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

    La humanización del formato se representan en bytes, kB, MB, GB, y TB.

    bytes a kB – comienza a partir de 10240 bytes

    bytes a MB – comienza a partir de 10485248 bytes = 10239.5 kB ~ 10 MB

    bytes a GB – comienza a partir de 10736893952 bytes = 10239.5 MB ~ 10 BG

    bytes a TB – comienza a partir de 10994579406848 bytes = 10239.5 GB ~ 10 TB

    Todas las conversiones de unidad se inicia a partir de 10 + <unit>.

    De referencia – Postgres Documentación Oficial

  4. 2
    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

    Otra alternativa

  5. 0
     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
    • Su respuesta será más valioso si se incluye una explicación de por qué el enfoque sugerido es de gran ayuda.
    • Su similar del caballo respuesta, sólo haciendo la clasificación por tamaño con bastante desde el tipo de vista será fácil de ver.
    • Por favor, añadir texto a su Respuesta, utilizando el enlace «Editar» en la «Respuesta» del espacio. A continuación, su contribución será conforme a la StackOverflow directrices (leído un poco en el Centro de Ayuda) 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here