Cette requête créera l'instruction DML pour obtenir ce que vous voulez.
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;
Renvoie :
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
Vous pouvez également l'exécuter automatiquement. Mais pas dans le plan SQL, vous avez besoin de EXECUTE
dans une fonction plpgsql ou DO
déclaration (PostgreSQL 9.0 ou version ultérieure) pour cela.
Vous avez également besoin de Postgres 9.0 ou version ultérieure pour le string_agg()
une fonction. Dans les anciennes versions, vous pouvez remplacer :array_to_string(array_agg(...), ', ')
.
Vous vous posez peut-être des questions sur le cast spécial 'mytbl'::regclass
. En savoir plus sur les types d'identifiant d'objet dans le manuel.
Au fait :NULL
les valeurs ne s'additionnent pas à COUNT(col)
par défaut.
Remplacez le nom de table (qualifié par le schéma) par mytbl
. Dans votre cas, cela devrait être :
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Si vous devez utiliser des casses mixtes ou des identifiants erronés (notez les guillemets) :
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...