web-dev-qa-db-fra.com

Trouver des colonnes vides d'une table dans PostgreSQL

Quelle requête retournerait le nom des colonnes d'une table où toutes les lignes sont nuls?

17
Seb

Vous devez interroger le catalogue d'informations pour ces informations:

SELECT column_name FROM information_schema.columns WHERE table_name='your_table'

vous donne les tables correspondantes pour vos colonnes.

Je n'ai pas d'installation des postgres actuellement à portée de main, mais le reste doit être simple

   loop over the results of the above query and foreach result
        send a COUNT(*) to the table
        if the count is null, give back the column,
                 else ignore it
   end foreach
1
DrColossos

Après avoir combiné plusieurs ressources, j'ai proposé cette fonction et une requête pour trouver toutes les colonnes vides dans toutes les tables de base de données.

CREATE OR REPLACE FUNCTION public.isEmptyColumn(IN table_name varchar, IN column_name varchar)
RETURNS boolean AS $$
declare 
    count integer;
BEGIN
    execute FORMAT('SELECT COUNT(*) from %s WHERE %s IS NOT NULL', table_name, quote_ident(column_name)) into count;
    RETURN (count = 0);
END; $$
LANGUAGE PLPGSQL; 


SELECT s.table_name, s.column_name
FROM information_schema.columns s
WHERE (s.table_schema LIKE 'public') AND
      (s.table_name NOT LIKE 'pg_%') AND
      (public.isEmptyColumn(s.table_name, s.column_name))

Prendre plaisir :)

0
obenda