Мне нужно создать какой-нибудь номер клиента при вставке записи, формат «А» + 4 цифры на основе идентификатора. Итак, запись ID 23 -> A0023 и так далее. Мое решение в настоящее время таково:
-- Table
create table t (
id bigserial unique primary key,
x text,
y text
);
-- Insert
insert into t (x, y) select concat('A',lpad((currval(pg_get_serial_sequence('t','id')) + 1)::text, 4, '0')), 'test';
Это работает отлично. Теперь мой вопрос ... это "безопасно", в том смысле, что currval (seq) +1 гарантированно так же, как столбец id будет получать? Я думаю, что это должно быть заблокировано во время выполнения оператора. Это правильный способ сделать это или есть какой-либо ярлык для прямого доступа к создаваемому идентификатору?