このクエリは、必要なものを取得するためのDMLステートメントを作成します。
SELECT 'SELECT ' || string_agg('count(' || quote_ident(attname) || ')', ', ')
|| 'FROM ' || attrelid::regclass
FROM pg_attribute
WHERE attrelid = 'mytbl'::regclass
AND attnum >= 1 -- exclude tableoid & friends (neg. attnum)
AND attisdropped is FALSE -- exclude deleted columns
GROUP BY attrelid;
返品:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
自動的に実行することもできます。ただし、プランSQLにはないため、EXECUTE
が必要です。 plpgsql関数またはDO
そのためのステートメント(PostgreSQL 9.0以降)。
string_agg()
にはPostgres9.0以降も必要です 働き。古いバージョンでは、次のように置き換えることができます:array_to_string(array_agg(...), ', ')
。
特別なキャスト'mytbl'::regclass
について疑問に思われるかもしれません 。マニュアルでオブジェクト識別子の種類の詳細をお読みください。
ところで:NULL
値はCOUNT(col)
に追加されません デフォルトで。
mytbl
を(スキーマ修飾された)テーブル名に置き換えます 。あなたの場合、それは次のようになります:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
大文字と小文字を混在させたり、識別子をめちゃくちゃにしたりする必要がある場合(引用符に注意してください):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...