PostgreSQL | Функция проверки наличия пробелов в строке данных или строке запроса с клиента

PostgreSQL | Функция проверки наличия пробелов в строке данных или строке запроса с клиента

 

Как узнать есть ли пробелы в строке данных или строке запроса клиента через 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

Скриншоты:

TRUE - Пробелы есть в строке данных - PostgreSQL
TRUE — Пробелы есть в строке данных — PostgreSQL
FALSE - Пробелов нет в строке данных - PostgreSQL
FALSE — Пробелов нет в строке данных — PostgreSQL

 

Как удалить эту функцию?

DROP FUNCTION test1.g4(str text);

 

Зачем мы проверяем на наличие пробелов в строке?

Почти всегда требуется проверка корректности вводимых данных. Таблицы в PostgreSQL устроены таким образом, что определённый столбец ожидает определённый тип данных и никак иначе. Если мы говорим, что в столбце А храним URL-адреса, то нам не нужны строки с рецептами клубничного варенья. URL-адреса имеют характерный индивидуальный синтаксис, который можно легко отличить от других данных. Один из признаков URL — отсутствие символов пробела.

Задача функций — проверять валидность (корректность) данных перед остальными операциями CRUD (Create, Read, Update, Delete).

 

Информационные ссылки

PostgreSQL | Проверка содержимого строки перед вставкой в таблицу по условию

Сайт СУБД PostgreSQLhttps://www.postgresql.org

Команды SQLhttps://postgrespro.ru/docs/postgresql/14/sql-commands

Команда CREATE FUNCTIONhttps://postgrespro.ru/docs/postgresql/14/sql-createfunction

Команда SELECThttps://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

Графический интерфейс pgAdminhttps://www.pgadmin.org