Как узнать есть ли пробелы в строке данных или строке запроса клиента через PostgreSQL?
Мы напишем функцию g4. У нас схема называется test1. Внутри тела функции будет производиться сопоставление на наличие пробелов. Проще всего это делать регулярными выражениями, которые работают практически во всех языках программирования одинаково.
Эта функция будет возвращать логическое значение TRUE или FALSE если встретит пробел в строке.
-- Добавляем язык 'plpgsql' -- Добавляем СТАРТ (BEGIN) и ФИНИШ (END) CREATE OR REPLACE FUNCTION test1.g4(str text) RETURNS boolean LANGUAGE 'plpgsql' AS $BODY$ BEGIN RETURN str ~ ' '; END; $BODY$;
Символ тильды «~» означает, что шаблон регулярного выражения будет учитывать регистр символов в строке.
У классического клавиатурного пробела нет понятия регистра, поэтому можно использовать два варианта написани:
SELECT 'bla bla' ~ ' '; или SELECT 'bla bla' ~* ' ';
Пример работы функции
SELECT test1.g4('bla bla bla'); -- true SELECT test1.g4('ffgghh'); -- false
Скриншоты:
Как удалить эту функцию?
DROP FUNCTION test1.g4(str text);
Зачем мы проверяем на наличие пробелов в строке?
Почти всегда требуется проверка корректности вводимых данных. Таблицы в PostgreSQL устроены таким образом, что определённый столбец ожидает определённый тип данных и никак иначе. Если мы говорим, что в столбце А храним URL-адреса, то нам не нужны строки с рецептами клубничного варенья. URL-адреса имеют характерный индивидуальный синтаксис, который можно легко отличить от других данных. Один из признаков URL — отсутствие символов пробела.
Задача функций — проверять валидность (корректность) данных перед остальными операциями CRUD (Create, Read, Update, Delete).
Информационные ссылки
PostgreSQL | Проверка содержимого строки перед вставкой в таблицу по условию
Сайт СУБД PostgreSQL — https://www.postgresql.org
Команды SQL — https://postgrespro.ru/docs/postgresql/14/sql-commands
Команда CREATE FUNCTION — https://postgrespro.ru/docs/postgresql/14/sql-createfunction
Команда SELECT — https://postgrespro.ru/docs/postgresql/14/sql-select
Раздел «9.4. Строковые функции и операторы» — https://postgrespro.ru/docs/postgresql/14/functions-string
Раздел «9.7.3. Регулярные выражения POSIX» — https://postgrespro.ru/docs/postgresql/14/functions-matching#FUNCTIONS-POSIX-REGEXP
Раздел «43.6. Управляющие структуры» — https://postgrespro.ru/docs/postgresql/14/plpgsql-control-structures
Графический интерфейс pgAdmin — https://www.pgadmin.org