Как найти все строки со значением NULL в любом столбце, используя PostgreSQL

Есть много немного похожих вопросов, но никто не решает именно эту проблему. "Найти все строки с нулевыми значениями в любой колонке" - это самый близкий, который я мог найти и предлагает ответ для SQL Server, но я ищу способ сделать это в PostgreSQL.

Как я могу выбрать только строки с NULL-значениями в любом столбце?

Я могу получить все имена столбцов достаточно легко:

select column_name from information_schema.columns where table_name = 'A';

но неясно, как проверить несколько имен столбцов для значений NULL. Очевидно, что это не сработает:

select* from A where (
  select column_name from information_schema.columns where table_name = 'A';
) IS NULL;

И поиск не нашел ничего полезного.

Ответы

Ответ 1

Вы можете использовать NOT(<table> IS NOT NULL).

Из документация:

Если выражение имеет значение в строке, то значение IS NULL истинно, когда строка само выражение является нулевым или когда все поля строк равны нулю, тогда как IS NOT NULL является истинным, когда само выражение строки не равно null и все поля строки не равны нулю.

Итак:

SELECT * FROM t;
┌────────┬────────┐
│   f1   │   f2   │
├────────┼────────┤
│ (null) │      1 │
│      2 │ (null) │
│ (null) │ (null) │
│      3 │      4 │
└────────┴────────┘
(4 rows)

SELECT * FROM t WHERE NOT (t IS NOT NULL);
┌────────┬────────┐
│   f1   │   f2   │
├────────┼────────┤
│ (null) │      1 │
│      2 │ (null) │
│ (null) │ (null) │
└────────┴────────┘
(3 rows)