2016-08-05 14 views
2

を持つすべてのテーブルの名前を検索し、私は簡単に次のクエリによってフォーム_%_jobsのすべてのテーブルを見つけることができます:私はそれがあるように、このリストをフィルタリングしたい以上のx行

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

はテーブルのみです200,000以上の行があります。

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

が、これはエラーになります:


私が試してみました

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

がどのように私はこれを達成することができますか?

+0

クエリによって返されたテーブルの数はあなたがテーブルの各返されたからカウントを取得するには、動的SQLを使用する必要があります200000>かどうかを確認しようとしています。 –

+0

@vkp意味があります。私は前にダイナミックSQLを使用していませんでしたので、私は完全にはわからないです –

+0

あなたはそのために真空解析統計を使用することができます –

答えて

3

があり、ここと実際の報告数字の間に多分わずかな相違を

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

を試してみてください。 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

私の目的のために、これは完璧です。特に、私が 'reltuples> 200000'を追加した質問に答えるには –

+0

助けになってうれしいです – e4c5

関連する問題