Denne forespørgsel vil oprette DML-sætningen for at få det, du ønsker.
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;
Returnerer:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
Du kan også udføre det automatisk. Men ikke i plan SQL, du skal bruge EXECUTE
i en plpgsql-funktion eller DO
sætning (PostgreSQL 9.0 eller nyere) for det.
Du skal også bruge Postgres 9.0 eller nyere til string_agg()
fungere. I ældre versioner kan du erstatte:array_to_string(array_agg(...), ', ')
.
Du undrer dig måske over den særlige cast 'mytbl'::regclass
. Læs mere om objektidentifikatortyper i manualen.
BTW:NULL
værdier føjes ikke til COUNT(col)
som standard.
Erstat det (skema-kvalificerede) tabelnavn med mytbl
. I dit tilfælde skulle det være:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Hvis du skulle bruge blandede store og små bogstaver eller på anden måde rodede identifikatorer (bemærk citaterne):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...