Какова лучшая практика для генерации последовательного кода в PostgreSQL

1

Скажем, мне нужно использовать форматированный код для моей транзакции

например: 20151208-1-20-xxx: где xxx находится в порядковом номере (например: 001 002).

Если мне нужно проверить предыдущий код транзакции, это будет проблемой, если транзакция произойдет в одно и то же время. Какова наилучшая практика для создания такого кода?

Спасибо ~

Теги:
database

1 ответ

0
Лучший ответ

Вы можете использовать последовательность. Создайте функцию для удобства:

create table test (code text);
create sequence test_sequence;

create function next_code()
returns text language sql as $$
select format('20151208-1-20-%s', to_char(nextval('test_sequence'), 'FM000'));
$$;

insert into test values (next_code());
insert into test values (next_code());

select * from test;

       code        
-------------------
 20151208-1-20-001
 20151208-1-20-002
(2 rows)

Обратите внимание, что хотя это, пожалуй, самый простой эффективный и безопасный метод, он не обеспечивает бесщелевых последовательностей.

Подробнее: CREATE SEQUENCE и функции манипуляции последовательностями.

Проверьте ответ a_horse_with_no_name в триггерах события ROLLBACK в postgresql для альтернативного (безразмерного) решения.

  • 0
    Могу ли я сбрасывать последовательность каждый день без использования планировщика / хрон / аналогичного?
  • 0
    Теперь я вижу, что первая часть кода является датой. Имеет ли следующая часть ( 1-20 ) особое значение?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню