Questa query creerà l'istruzione DML per ottenere ciò che desideri.
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;
Resi:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
Puoi anche eseguirlo automaticamente. Ma non nel piano SQL, è necessario EXECUTE
in una funzione plpgsql o DO
istruzione (PostgreSQL 9.0 o successivo) per questo.
Hai anche bisogno di Postgres 9.0 o successivo per string_agg()
funzione. Nelle versioni precedenti, puoi sostituire:array_to_string(array_agg(...), ', ')
.
Potresti chiederti del cast speciale 'mytbl'::regclass
. Maggiori informazioni sui tipi di identificatori di oggetto nel manuale.
A proposito:NULL
i valori non vengono aggiunti a COUNT(col)
per impostazione predefinita.
Sostituisci il nome della tabella (qualificato per lo schema) con mytbl
. Nel tuo caso dovrebbe essere:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Se dovessi utilizzare identificatori misti o altrimenti incasinati (nota le virgolette):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...