PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

postgresql - Anzahl (keine Nullwerte) jeder Spalte in einer Tabelle

Diese Abfrage erstellt die DML-Anweisung, um das Gewünschte zu erhalten.

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;

Rückgabe:

SELECT count(col1), count(col2), count(col3), ...
FROM   mytbl

Sie können es auch automatisch ausführen. Aber nicht in Plan SQL, Sie brauchen EXECUTE in einer plpgsql-Funktion oder DO -Anweisung (PostgreSQL 9.0 oder höher) dafür.

Sie benötigen außerdem Postgres 9.0 oder höher für string_agg() Funktion. In älteren Versionen können Sie Folgendes ersetzen:array_to_string(array_agg(...), ', ') .

Sie wundern sich vielleicht über die spezielle Umwandlung 'mytbl'::regclass . Lesen Sie mehr über Objektkennungstypen im Handbuch.

Übrigens:NULL Werte werden nicht zu COUNT(col) hinzugefügt standardmäßig.

Ersetzen Sie mytbl durch den (Schema-qualifizierten) Tabellennamen . In Ihrem Fall sollte das lauten:

...
WHERE  attrelid = 'geoproject.mes_wastab'::regclass
...

Falls Sie gemischte Groß-/Kleinschreibung oder anderweitig durcheinander gebrachte Bezeichner verwenden sollten (beachten Sie die Anführungszeichen):

...
WHERE  attrelid = '"gEopRoject"."MES_wastab"'::regclass
...