Den här frågan skapar DML-satsen för att få det du vill ha.
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;
Returnerar:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
Du kan också köra det automatiskt. Men inte i plan SQL, du behöver EXECUTE
i en plpgsql-funktion eller DO
uttalande (PostgreSQL 9.0 eller senare) för det.
Du behöver också Postgres 9.0 eller senare för string_agg()
fungera. I äldre versioner kan du ersätta:array_to_string(array_agg(...), ', ')
.
Du kanske undrar över den speciella casten 'mytbl'::regclass
. Läs mer om objektidentifieringstyper i manualen.
BTW:NULL
värden läggs inte till i COUNT(col)
som standard.
Byt ut mytbl
med det (schemakvalificerade) tabellnamnet . I ditt fall borde det vara:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Om du ska använda blandade skiftlägen eller på annat sätt trassliga identifierare (observera citattecken):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...