PostgreSQL получает новый идентификатор во время вставки

Мне нужно создать какой-нибудь номер клиента при вставке записи, формат "А" + 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 будет получать? Я думаю, что это должно быть заблокировано во время выполнения оператора. Это правильный способ сделать это или есть какие-либо ярлыки для прямого доступа к создаваемому идентификатору?

1 ответ

Вместо того, чтобы хранить эти данные, вы можете просто запрашивать их каждый раз, когда вам это нужно, делая все это намного менее подверженным ошибкам:

SELECT id, 'A' + LPAD(id::varchar, 4, '0')
FROM   t
Другие вопросы по тегам