NULL-значения, которые база данных отдаёт на клиент могут не представлять никакой ценности для конечного пользователя. В большинстве случаев от них нужно избавляться.
Если выбирать данные из таблиц с включением NULL-значений, тогда в остальной части приложения нужно будет делать эти проверки «на NULL» и производить подмены на что-то более внятное и информативное. Либо бэкенд меняет данные, либо уже на клиенте происходит замена.
В PostgreSQL есть готовое решение подобной проблемы — это функция COALESCE(). Она принимает любое количество параметров. Первый «не NULL» параметр в направлении слева-направо будет возвращён данной функцией. Если все параметры будут NULL, тогда вернётся NULL. Как этим пользоваться? Посмотрим на таблицу:
CREATE TABLE IF NOT EXISTS test.t_2023_07_13 ( id serial, name text, age int, color text, CONSTRAINT t_2023_07_13_pkey PRIMARY KEY (id) ); -- DROP TABLE IF EXISTS test.t_2023_07_13; INSERT INTO test.t_2023_07_13 (name, age, color) VALUES (null, 20, 'красный'); INSERT INTO test.t_2023_07_13 (name, age, color) VALUES ('Иван', null, 'синий'); INSERT INTO test.t_2023_07_13 (name, age, color) VALUES ('Мария', 30, 'зелёный'); INSERT INTO test.t_2023_07_13 (name, age, color) VALUES ('Дмитрий', 45, null); SELECT * FROM test.t_2023_07_13;
Визуально данные в таблице выглядят так:
Мы видим 3 записи с NULL-значениями. Вот от них нам и нужно избавиться.
Теперь сформируем SELECT запрос с использованием функции COALESCE(). ВАЖНО! Для корректной выборки данных, типы данных в столбцах и на выходе из COALESCE() должны совпадать, иначе будет ошибка.
SELECT id, COALESCE(name, '--без имени--'), COALESCE(age, 0), COALESCE(color, '--без цвета--') FROM test.t_2023_07_13;
Результат такой выборки:
Теперь наша таблица заполнена данными и нигде не встречаются NULL-значения. Такую таблицу можно отправлять на клиент.
Информационные ссылки
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org
Команда SELECT — https://postgrespro.ru/docs/postgresql/15/sql-select
Документация — Функция COALESCE() — https://postgrespro.ru/docs/postgresql/15/functions-conditional#FUNCTIONS-COALESCE-NVL-IFNULL