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

Como você encontra a contagem de linhas para todas as suas tabelas no Postgres


Há três maneiras de obter esse tipo de contagem, cada uma com suas próprias vantagens.

Se você quiser uma contagem verdadeira, você deve executar a instrução SELECT como a que você usou em cada tabela. Isso ocorre porque o PostgreSQL mantém as informações de visibilidade da linha na própria linha, não em qualquer outro lugar, portanto, qualquer contagem precisa pode ser apenas relativa a alguma transação. Você está obtendo uma contagem do que essa transação vê no momento em que é executada. Você pode automatizar isso para executar em todas as tabelas do banco de dados, mas provavelmente não precisa desse nível de precisão ou deseja esperar tanto tempo.

A segunda abordagem observa que o coletor de estatísticas rastreia aproximadamente quantas linhas estão "ativas" (não excluídas ou obsoletas por atualizações posteriores) a qualquer momento. Este valor pode estar um pouco fora de atividade pesada, mas geralmente é uma boa estimativa:
SELECT schemaname,relname,n_live_tup 
  FROM pg_stat_user_tables 
  ORDER BY n_live_tup DESC;

Isso também pode mostrar quantas linhas estão mortas, o que é um número interessante para monitorar.

A terceira maneira é observar que o comando ANALYZE do sistema, que é executado pelo processo de autovacuum regularmente a partir do PostgreSQL 8.3 para atualizar as estatísticas da tabela, também calcula uma estimativa de linha. Você pode pegar esse assim:
SELECT 
  nspname AS schemaname,relname,reltuples
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE 
  nspname NOT IN ('pg_catalog', 'information_schema') AND
  relkind='r' 
ORDER BY reltuples DESC;

Qual dessas consultas é melhor usar é difícil dizer. Normalmente eu tomo essa decisão com base se há informações mais úteis que eu também quero usar dentro de pg_class ou dentro de pg_stat_user_tables. Para fins básicos de contagem, apenas para ver quão grandes são as coisas em geral, ambos devem ser precisos o suficiente.