1
比方說,我必須使用格式化代碼爲我的交易什麼是生成順序代碼在PostgreSQL的
例如最佳實踐:20151208-1-20-XXX:其中xxx是序列號 (例如:001,002)。
如果我必須檢查以前的交易代碼,如果交易發生在同一時間,這將是一個問題。 生成這種代碼的最佳做法是什麼?
謝謝〜
比方說,我必須使用格式化代碼爲我的交易什麼是生成順序代碼在PostgreSQL的
例如最佳實踐: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和Sequence Manipulation Functions。
檢查a_horse_with_no_name在ROLLBACK event triggers in postgresql中的答案以獲得替代(無間隙)解決方案。
我可以每天重置序列而不使用scheduler/cron/similar嗎? –
現在我看到代碼的第一部分是日期。下一部分('1-20')有特殊含義嗎? – klin
是的,它可能是產品類型ID或其他表ID。我認爲我們可以將變量傳遞給函數嗎? –