Esta consulta creará la instrucción DML para obtener lo que desea.
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;
Devoluciones:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
También puede ejecutarlo automáticamente. Pero no en plan SQL, necesita EXECUTE
en una función plpgsql o DO
declaración (PostgreSQL 9.0 o posterior) para eso.
También necesita Postgres 9.0 o posterior para string_agg()
función. En versiones anteriores, puede sustituir:array_to_string(array_agg(...), ', ')
.
Quizás te preguntes sobre el elenco especial 'mytbl'::regclass
. Lea más sobre los tipos de identificadores de objetos en el manual.
Por cierto:NULL
los valores no se suman a COUNT(col)
por defecto.
Sustituya el nombre de la tabla (calificado por esquema) por mytbl
. En su caso, debería ser:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Si debe usar mayúsculas y minúsculas o identificadores desordenados (tenga en cuenta las comillas):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...