次の機能でクエリを作成して私を助けることができる誰もがあります:これはとの素敵な結果になりますPostgreSQLの入れ子に選択
SELECT relname FROM pg_catalog.pg_class WHERE relkind = 'r';
:
はのはのような単純な文を持ってみましょう単一の列 - すべてのテーブルの名前
ここで、テーブルの1つに名前「table1」があるとします。実行する場合:
SELECT count(*) FROM table1;
テーブル "table1"の行数を取得します。
実際の質問 - これらの2つのクエリをどのように統一し、2つの列の結果を与える1つのクエリを持つことができますか?テーブル名と行数?擬似それはこのようなものでなければなりませんSQLで書かれた:
SELECT relname, (SELECT count(*) FROM relname::[as table name]) FROM pg_catalog.pg_class WHERE relkind = 'r';
そして、ここであり、例えば - 3つのデータベースのテーブルと名前がある場合にTABLE1、table2のテーブル3であり、それらはそれぞれ持っています20、30と40行は、クエリの結果は次のようにする必要があります:;-)
PSを助けるために喜んで誰にでも
-------------
|relname| rows|
|-------------|
|table1 | 20|
|-------------|
|table2 | 30|
|-------------|
|table3 | 40|
-------------
感謝はい、私は(名前の変更から修正さ誤字が最後のクエリでrelnameする)テーブル名がスキーマ修飾;-)のは、データベース内のすべてのテーブルにはユニークな名前;-)
を持っていることを期待しましょうではないことを知っている
EDIT1:質問は「テーブルの行数を見つけるにはどうすればよいですか」という質問には関係ありません。私が尋ねるのは、2つの選択肢を持つクエリを構築する方法と、2つ目は、最初の選択結果からの列の値からFROMを持つ方法です。
EDIT2:私は動的クエリを試していますが、それは仕事をしますが、PL/pgSQLでのみ使用できます。それは私のニーズに合っていません。さらに私はPREPAREとEXECUTEステートメントを試しましたが、もう一度動作しません。とにかく - 私は2つのクエリのアプローチに固執します。しかし、私はPostgreSQLがこれを可能にしていることを確信しています。
BTW、[Postgresのすべてのテーブルの行数を調べる方法](http://stackoverflow.com/q/2596670/593144) – Abelisto
PL/pgSQLを使用できない理由はありますか? – jdigital
私はPostgreSQLの専門家ではありませんが、AFAIKはPL/pgSQLを使うことはできません(もちろん関数呼び出しがあるかもしれません...など)。しかし、私が実際にやろうとしているのは、クエリ(SELECT)を実行し、その結果に基づいて別のクエリを生成し、その結果を1つに結合することです。あなたはこれができますか ???これは 'SELECT relname、[PL/pgSQL BLOCK :: EXECUTE 'SELECT count(*)FROM' ||]のようなものでなければなりません。 relname] FROM pg_catalog.pg_classどこrelkind = 'r'; '。私はそれを擬似コードする方法も知らない。 –