PostgreSQL получает новый идентификатор во время вставки - PullRequest
0 голосов
/ 14 ноября 2018

Мне нужно создать какой-нибудь номер клиента при вставке записи, формат «А» + 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 Ответ

0 голосов
/ 14 ноября 2018

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

SELECT id, 'A' + LPAD(id::varchar, 4, '0')
FROM   t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...