web-dev-qa-db-fra.com

Recherche de colonnes NON NULL dans PostgreSQL

J'avais une affectation pour chaque table pour compter les colonnes nullables. Facile:

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


Maintenant, je dois le modifier pour compter "les colonnes qui ont la propriété" NOT NULL "". Le code suivant fera-t-il cela ou vérifiera-t-il simplement que le nom de la colonne météo n'est pas nul?

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 non ... Des conseils?

34
Allan David Munja

Non.

Cette requête

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

renverra toutes les lignes qui ont une valeur dans la colonne "nom_colonne".

Toutes les lignes de cette table auront toujours une valeur dans la colonne "nom_colonne".

Avez-vous juste besoin de savoir combien de colonnes sont nullables et combien sont non nullables?

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

Compter par nom de table? Je pense que vous pouvez l'utiliser.

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

Pour obtenir un nombre de toutes les colonnes NOT NULL dans n'importe quelle table, utilisez:

SELECT count(*)
  FROM information_schema.columns
 WHERE table_schema = 'table_schema_here'
   AND table_name   = 'table_name_here'
   AND is_nullable = 'YES';

J'espère que cela aidera quelqu'un.

0
J Ngugi