Когда мы пишем стандартный код вставки записи в таблицу в PostgreSQL, то мы можем указать для команды INSERT атрибут RETURNING.
Справа от RETURNING мы должны указать имя столбца, по которому нужно возвращать значение.
Одна вставка — один возврат.
Пример:
insert into test1.cars (brand, model, year, mileage, price, color, typeengine) values ('Volkswagen', 'Touareg', 2006, 227000, 550000, 'Синий', 'Дизель') RETURNING id;
Вернёт целочисленное значение из ячейки пересечения первичного ключа (ID) и строчки новой записи.

С обычным INSERT всё ясно, но как быть с функцией? Как передать строку в функцию, потом произвести вставку и только потом вернуть id?
Функция, возвращающая идентификатор вставленной в таблицу записи
— РАБОЧАЯ. Нужно два INTO INTO
CREATE OR REPLACE FUNCTION a.a2(str text)
RETURNS bigint
LANGUAGE ‘plpgsql’
AS $BODY$
DECLARE pkeyfrominsert bigint;
BEGIN
INSERT INTO a.t_dname (dname) values (str) RETURNING id INTO pkeyfrominsert;
RETURN pkeyfrominsert;
END;
$BODY$;
— Вызов функции с параметром
SELECT a.a2(‘efim360’);
SELECT a.a2(‘efim’);
— Удаление функции
DROP FUNCTION a.a2(str text);
Ключевой момент в работе этой функции — ИСПОЛЬЗУЮТСЯ ДВА INTO INTO ! ! !:
- Мы также используем вставку записи INSERT INTO в теле функции, но …
- Мы добавляем после RETURNING id слово INTO и далее записываем наш идентификатор привязки (наше название переменной)
- Мы возвращаем нашу переменную при помощи команды RETURN
В нашем примере мы передаём строку, а в ответ получаем идентификатор вставленной в таблицу записи. В таблице у нас работает автоинкремент, поэтому если вставка не осуществится, то значение последовательности всё равно увеличится на единицу.
Пример вставки и возврата

Информационные ссылки
PostgreSQL | Как создать переменную в теле функции?
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
Команда DROP FUNCTION — https://postgrespro.ru/docs/postgresql/14/sql-dropfunction
Команда SELECT — https://postgrespro.ru/docs/postgresql/14/sql-select
Команда INSERT — https://postgrespro.ru/docs/postgresql/14/sql-insert
Раздел «9.4. Строковые функции и операторы» — https://postgrespro.ru/docs/postgresql/14/functions-string
Раздел «43.6. Управляющие структуры» — https://postgrespro.ru/docs/postgresql/14/plpgsql-control-structures
Графический интерфейс pgAdmin — https://www.pgadmin.org