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