PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

postgresql - nombre (pas de valeurs nulles) de chaque colonne d'une table

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
...