В жизни практически любого Java-разработчика наступает тот момент, когда это нужно. Момент, когда, чтобы разобраться почему приложение ведет себя так, а не иначе, когда нужно посмотреть, где проседает производительность, когда нужно написать какой-нибудь класс для модификации байткода для получения какого-либо эффекта, и т.д.
А почему мало полезна?
PostgreSQL всегда увеличивает сначала счетчик (берет из него значение для записи предназначенной на вставку), а потом уже производит проверки и т.д. Так что если ваш INSERT упадет на CONSTRAINT или CHECK, то счетчик все равно будет увеличен.
Пример:
CREATE TABLE public.country
(
id bigserial,
name character varying,
UNIQUE (name)
);
INSERT INTO country (name)
VALUES ('USA'), ('Russia');
select currval('country_id_seq');
Прост, как 2 копейки, статическая типизация запросов, удобный DSL: пишешь код, как SQL-запрос.
PostgreSQL всегда увеличивает сначала счетчик (берет из него значение для записи предназначенной на вставку), а потом уже производит проверки и т.д. Так что если ваш INSERT упадет на CONSTRAINT или CHECK, то счетчик все равно будет увеличен.
Пример:
2
ERROR: duplicate key value violates unique constraint «country_name_key»
DETAIL: Key (name)=(USA) already exists.
3