612 Stimmen

Wie finden Sie die Zeilenzahl für alle Ihre Tabellen in Postgres

Ich suche nach einer Möglichkeit, die Zeilenzahl für alle meine Tabellen in Postgres zu ermitteln. Ich weiß, dass ich dies für eine Tabelle nach der anderen tun kann mit:

SELECT count(*) FROM table_name;

aber ich würde gerne die Zeilenzahl für alle Tabellen sehen und dann danach ordnen, um eine Vorstellung davon zu bekommen, wie groß meine Tabellen sind.

2voto

CFreitas Punkte 1537

Ich mag Daniel Vérité's respuesta . Wenn Sie jedoch keine CREATE-Anweisung verwenden können, können Sie entweder eine Bash-Lösung oder, wenn Sie ein Windows-Benutzer sind, ein Powershell-Programm:

# You don't need this if you have pgpass.conf
$env:PGPASSWORD = "userpass"

# Get table list
$tables = & 'C:\Program Files\PostgreSQL\9.4\bin\psql.exe' -U user -w -d dbname -At -c "select table_name from information_schema.tables where table_type='BASE TABLE' AND table_schema='schema1'"

foreach ($table in $tables) {
    & 'C:\path_to_postresql\bin\psql.exe' -U root -w -d dbname -At -c "select '$table', count(*) from $table"
}

2voto

MrMesees Punkte 1318

Ich wollte die Gesamtsumme aus allen Tabellen und eine Liste der Tabellen mit ihren Zählungen. Ein bisschen wie ein Leistungsdiagramm, wo die meiste Zeit verbracht wurde

WITH results AS ( 
  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'
     GROUP BY schemaname, relname, reltuples
)

SELECT * FROM results
UNION
SELECT 'all' AS schemaname, 'all' AS relname, SUM(reltuples) AS "reltuples" FROM results

ORDER BY reltuples DESC

Sie können natürlich auch eine LIMIT Klausel für die Ergebnisse in dieser Version zu verwenden, damit Sie die größte n Straftäter sowie eine Gesamtzahl.

Dabei ist zu beachten, dass man es nach dem Massenimport eine Zeit lang ruhen lassen muss. Ich habe dies getestet, indem ich einfach 5000 Zeilen zu einer Datenbank über mehrere Tabellen mit echten Importdaten hinzugefügt habe. Es wurden 1800 Datensätze für etwa eine Minute angezeigt (wahrscheinlich ein konfigurierbares Fenster)

Dies basiert auf https://stackoverflow.com/a/2611745/1548557 Arbeit, also danke und Anerkennung für die Abfrage innerhalb des CTE

1voto

Radhakrishna Punkte 11

Die folgende Abfrage liefert uns die Zeilenzahl und Größe für jede Tabelle

select table_schema, table_name, pg_relation_size('"'||tabelle_schema||'"."'||tabelle_name||'"')/1024/1024 size_MB, (xpath('/row/c/text()', query_to_xml(format('select count(*) AS c from %I.%I', table_schema, table_name), false, true,'')))[1]::text::int AS rows_n from information_schema.tables order by Größe_MB desc;

-5voto

SuperNova Punkte 20412

Sie können einfach tun select from

select from table_name;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X