Пусть есть Таблица вида A:
Id: SERIAL
Name: VARCHAR (128)
Тогда запрос:
SELECT MIN(res."Id")+1
FROM (
SELECT alias1."Id"
FROM (
SELECT alias3."Id" FROM public."A" AS alias3 UNION SELECT 0) AS alias1
WHERE NOT EXISTS (
SELECT alias2."Id"
FROM public."A" AS alias2
WHERE alias2."Id" = alias1."Id" + 1
)
) AS res
Найдет минимальное значение Id > 0, которого нет в таблице.