Tento dotaz vytvoří příkaz DML, abyste získali to, co chcete.
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;
Vrátí:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
Můžete jej také automaticky spustit. Ale ne v plánu SQL, potřebujete EXECUTE ve funkci plpgsql nebo DO (PostgreSQL 9.0 nebo novější).
Pro string_agg() také potřebujete Postgres 9.0 nebo novější funkce. Ve starších verzích můžete nahradit:array_to_string(array_agg(...), ', ') .
Možná vás zajímá speciální obsazení 'mytbl'::regclass . Přečtěte si více o typech identifikátorů objektů v příručce.
BTW:NULL hodnoty se nepřidávají do COUNT(col) ve výchozím nastavení.
Nahraďte mytbl názvem tabulky (kvalifikovaný pro schéma). . Ve vašem případě by to mělo být:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Pokud byste měli používat smíšená velká a malá písmena nebo jinak zmatené identifikátory (všimněte si uvozovek):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...