Скажем, мне нужно использовать форматированный код для моей транзакции
например: 20151208-1-20-xxx: где xxx находится в порядковом номере (например: 001 002).
Если мне нужно проверить предыдущий код транзакции, это будет проблемой, если транзакция произойдет в одно и то же время. Какова наилучшая практика для создания такого кода?
Спасибо ~
Вы можете использовать последовательность. Создайте функцию для удобства:
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 для альтернативного (безразмерного) решения.
1-20
) особое значение?