2017-02-09 127 views
2

我怎樣才能以「線程安全」的方式編寫一個函數,例如返回數字0-7循環法,以確保每次調用都有一個新的數字(如果大於7則環繞)?Postgres函數返回數字0-7循環?

它應該是一個全局函數,所以如果「連接1」調用它並獲得數字3,「連接2」在調用時應該得到數字4等等。

+0

只是創建一個sequece –

回答

5

按照docs,可以循環序列:

t=# create sequence rr07 minvalue 0 maxvalue 7 cycle; 
CREATE SEQUENCE 
t=# select nextval('rr07'); 
nextval 
--------- 
     0 
(1 row) 

t=# select nextval('rr07'); 
nextval 
--------- 
     1 
(1 row) 

t=# select nextval('rr07'); 
nextval 
--------- 
     2 
(1 row) 

t=# select nextval('rr07'); 
nextval 
--------- 
     3 
(1 row) 

t=# select nextval('rr07'); 
nextval 
--------- 
     4 
(1 row) 

t=# select nextval('rr07'); 
nextval 
--------- 
     5 
(1 row) 

t=# select nextval('rr07'); 
nextval 
--------- 
     6 
(1 row) 

t=# select nextval('rr07'); 
nextval 
--------- 
     7 
(1 row) 

t=# select nextval('rr07'); 
nextval 
--------- 
     0 
(1 row)