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