sql >> Database >  >> RDS >> PostgreSQL

postgresql - tel (geen null-waarden) van elke kolom in een tabel

Deze query maakt de DML-instructie om te krijgen wat je wilt.

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;

Retourneren:

SELECT count(col1), count(col2), count(col3), ...
FROM   mytbl

U kunt het ook automatisch uitvoeren. Maar niet in plan SQL, je hebt EXECUTE nodig in een plpgsql-functie of DO statement (PostgreSQL 9.0 of hoger) daarvoor.

Je hebt ook Postgres 9.0 of hoger nodig voor de string_agg() functie. In oudere versies kunt u vervangen door:array_to_string(array_agg(...), ', ') .

Je vraagt ​​je misschien af ​​hoe het zit met de speciale cast 'mytbl'::regclass . Lees meer over objectidentificatietypes in de handleiding.

BTW:NULL waarden worden niet opgeteld bij COUNT(col) standaard.

Vervang de (schemagekwalificeerde) tabelnaam door mytbl . In jouw geval zou dat moeten zijn:

...
WHERE  attrelid = 'geoproject.mes_wastab'::regclass
...

Als u identifiers met gemengde hoofdletters of anderszins verknoeide zou moeten gebruiken (let op de aanhalingstekens):

...
WHERE  attrelid = '"gEopRoject"."MES_wastab"'::regclass
...


  1. Alleen een tabel maken als deze niet in PostgreSQL bestaat

  2. Meerkolomsindex op 3 velden met heterogene gegevenstypen

  3. Hoe een gebruiker aan te maken in MySQL

  4. ListView toont niet de juiste afbeeldingen die in de tekenbare staan ​​op basis van hun naam in sqlite