2016-08-05 9 views
2

ich einfach alle Tabellen der Form _%_jobs durch die folgende Abfrage finden:Suche Namen aller Tabellen mit mehr als x Reihen

select * from pg_tables where tablename like '_%_jobs' 

Ich möchte diese Liste filtern, damit ist nur die Tabellen die mehr als 200.000 Zeilen haben.


Ich habe versucht:

select * from pg_tables where tablename like '_%_jobs' having count(*) > 200000 

aber dies führt zu einem Fehler:

ERROR: column "pg_tables.schemaname" must appear in the GROUP BY clause or be used in an aggregate function

Wie kann ich das erreichen?

+0

versuchen Sie, wenn die Anzahl der Tabellen, die von der Abfrage sind> 200000 Sie müssen dynamische SQL zurückgegeben überprüfen verwenden, um die Zählungen von jedem der Tische zurück bekommen. –

+0

@vkp das macht Sinn. Ich habe dynamisches sql vorher nicht verwendet, also bin ich nicht ganz sicher, wie man das geht –

+0

können Sie Vakuumanalysestatistiken für das –

Antwort

3

Versuchen

SELECT relname, reltuples from pg_class where relname like '_%_jobs' 

Es gibt vielleicht geringfügige Abweichungen zwischen den Zahlen hier und tatsächlichen berichtet. Aus dem Abschnitt zu reltuples:

Number of rows in the table. This is only an estimate used by the planner. It is updated by VACUUM, ANALYZE, and a few DDL commands such as CREATE INDEX.

+0

Für meine Zwecke ist dies perfekt, um speziell die Frage zu beantworten, die ich 'WHERE reltuples> 200000' hinzugefügt habe –

+0

froh, um Hilfe gewesen zu sein – e4c5