Essa consulta criará a instrução DML para obter o que você deseja.
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;
Devoluções:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
Você também pode executá-lo automaticamente. Mas não no plano SQL, você precisa de
EXECUTE
em uma função plpgsql ou DO
instrução (PostgreSQL 9.0 ou posterior) para isso. Você também precisa do Postgres 9.0 ou posterior para o
string_agg()
função. Em versões mais antigas, você pode substituir:array_to_string(array_agg(...), ', ')
. Você pode se perguntar sobre o elenco especial
'mytbl'::regclass
. Leia mais sobre os tipos de identificador de objeto no manual. BTW:
NULL
os valores não são adicionados a COUNT(col)
por padrão. Substitua o nome da tabela (qualificada pelo esquema) por
mytbl
. No seu caso deveria ser:...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Se você deve usar maiúsculas e minúsculas ou identificadores confusos (observe as aspas):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...