2015-12-08 51 views
1

比方說,我必須使用格式化代碼爲我的交易什麼是生成順序代碼在PostgreSQL的

例如最佳實踐:20151208-1-20-XXX:其中xxx是序列號 (例如:001,002)。

如果我必須檢查以前的交易代碼,如果交易發生在同一時間,這將是一個問題。 生成這種代碼的最佳做法是什麼?

謝謝〜

回答

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 SEQUENCESequence Manipulation Functions

檢查a_horse_with_no_name在ROLLBACK event triggers in postgresql中的答案以獲得替代(無間隙)解決方案。

+0

我可以每天重置序列而不使用scheduler/cron/similar嗎? –

+0

現在我看到代碼的第一部分是日期。下一部分('1-20')有特殊含義嗎? – klin

+0

是的,它可能是產品類型ID或其他表ID。我認爲我們可以將變量傳遞給函數嗎? –

相關問題