PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

postgresql - conteggio (nessun valore nullo) di ogni colonna in una tabella

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