2011-03-17 18 views
26

Tenía una asignación para cada tabla para contar las columnas que aceptan nulos. Fácil:Encontrar columnas que NO son NULAS en PostgreSQL

SELECT table_name, count(*) FROM INFORMATION_SCHEMA.COLUMNS 
WHERE is_nullable='NO' 
GROUP BY table_name; 


ahora tengo que modificar esto para contar "columnas que tienen la propiedad 'NOT NULL'". ¿El siguiente código hará esto o solo comprobará que el nombre de la columna meteorológica no es nulo?

CREATE TEMP TABLE A AS 
SELECT DISTINCT column_name, table_name AS name FROM INFORMATION_SCHEMA.COLUMNS 
WHERE column_name IS NOT NULL 
GROUP BY table_name, column_name; 

SELECT name, count(*) FROM A 
GROUP BY name; 

Si no ... ¿Algún consejo?

+0

Creo que la pregunta es si la columna se estableció NOT NULL explícitamente o si es una clave principal (que nunca puede ser nula). Si es así, no parece que COLUMNS tenga esa información. Puede tener que buscar a través de la columna def en pg_attrdef para NOT NULL. De lo contrario, solo está reafirmando su primera consulta. –

+0

Parece que COLUMNS tiene esa información para mí. Declarar una columna ya sea 'NOT NULL PRIMARY KEY' o simplemente 'PRIMARY KEY' establece is_nullable a 'NO'. Las columnas declararon explícitamente NULL y los conjuntos NULL declarados implícitamente son_nulables a 'SÍ'. –

Respuesta

30

Esta consulta

SELECT DISTINCT column_name, table_name 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE column_name IS NOT NULL 

devolverá todas las filas que tienen un valor en la columna "nombre_columna".

Todas las filas en esa tabla siempre tendrán un valor en la columna "column_name".

¿Solo necesita saber cuántas columnas son nulables y cuántas no admiten nulos?

SELECT is_nullable, COUNT(*) 
FROM INFORMATION_SCHEMA.COLUMNS 
GROUP BY is_nullable; 

¿Condición por nombre de tabla? Creo que puedes usar esto.

SELECT table_name, is_nullable, count(*) 
FROM INFORMATION_SCHEMA.COLUMNS 
GROUP BY table_name, is_nullable 
ORDER BY table_name, is_nullable; 
Cuestiones relacionadas