Deze query maakt de DML-instructie om te krijgen wat je wilt.
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;
Retourneren:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
U kunt het ook automatisch uitvoeren. Maar niet in plan SQL, je hebt EXECUTE
nodig in een plpgsql-functie of DO
statement (PostgreSQL 9.0 of hoger) daarvoor.
Je hebt ook Postgres 9.0 of hoger nodig voor de string_agg()
functie. In oudere versies kunt u vervangen door:array_to_string(array_agg(...), ', ')
.
Je vraagt je misschien af hoe het zit met de speciale cast 'mytbl'::regclass
. Lees meer over objectidentificatietypes in de handleiding.
BTW:NULL
waarden worden niet opgeteld bij COUNT(col)
standaard.
Vervang de (schemagekwalificeerde) tabelnaam door mytbl
. In jouw geval zou dat moeten zijn:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Als u identifiers met gemengde hoofdletters of anderszins verknoeide zou moeten gebruiken (let op de aanhalingstekens):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...