

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 序列處理函式
<a name="sequence-functions-syntax-support"></a>

本節說明在序列物件上操作的函數，也稱為序列產生器或僅序列。序列物件是使用 建立的特殊單列資料表[`CREATE SEQUENCE`](create-sequence-syntax-support.md)。序列物件通常用於為資料表的資料列產生唯一識別符。序列函數提供簡單、多使用者安全的方法來從序列物件取得連續的序列值。

**重要**  
使用序列時，應仔細考慮快取值。如需詳細資訊，請參閱 [`CREATE SEQUENCE`](create-sequence-syntax-support.md) 頁面上的重要標註。  
如需如何根據工作負載模式以最佳方式使用序列的指導，請參閱 [使用序列和身分資料欄](sequences-identity-columns-working-with.md)。


| 函式 | Description | 
| --- | --- | 
| nextval ( regclass ) → bigint | 將序列物件推進到下一個值，並傳回該值。這是以原子方式完成的：即使多個工作階段nextval同時執行，每個工作階段都會安全地收到不同的序列值。如果序列物件已使用預設參數建立，後續nextval呼叫將傳回以 1 開頭的遞增值。您可以在 [`CREATE SEQUENCE`](create-sequence-syntax-support.md)命令中使用適當的參數來取得其他行為。此函數需要 序列上的 USAGE或 UPDATE權限。 | 
| setval ( regclass, bigint [, boolean ] ) → bigint | 設定序列物件的目前值，並選擇性地設定其is\$1called旗標。雙參數形式會將序列的 last\$1value 欄位設定為指定的值，並將其is\$1called欄位設定為 true，這表示下一個 nextval會在傳回值之前推進序列。將報告的值currval也會設定為指定的值。在三參數形式中， is\$1called 可以設定為 true或 false。 true 具有與雙參數形式相同的效果。如果設定為 false，下一個 nextval會傳回確切指定的值，而序列提升會從下列 開始nextval。此外，此處currval不會變更 回報的值。例如：<pre>SELECT setval('myseq', 42);           -- Next nextval will return 43<br />SELECT setval('myseq', 42, true);     -- Same as above<br />SELECT setval('myseq', 42, false);    -- Next nextval will return 42</pre> 傳回的結果setval只是其第二個引數的值。此函數需要序列UPDATE的權限。 | 
| currval ( regclass ) → bigint | 傳回 最近在目前工作階段中nextval針對此序列取得的值。（如果在此工作階段中nextval從未針對此序列呼叫 ，則會報告錯誤。) 由於這會傳回工作階段本機值，因此無論其他工作階段是否nextval因為目前工作階段而執行，都會提供可預測的答案。此函數需要 序列上的 USAGE或 SELECT權限。 | 
| lastval () → bigint | 傳回目前交易nextval中 最近傳回的值。此函數與 相同currval，除了不將序列名稱作為引數，而是參考目前交易中nextval最近套用到的任何序列。lastval 如果目前交易中nextval尚未呼叫 ，則呼叫 時發生錯誤。此函數對上次使用的序列需要 USAGE或 SELECT權限。 | 

**警告**  
如果呼叫交易稍後中止，`nextval`則不會回收 取得的值以供重複使用。這表示交易中止或資料庫當機可能會導致指派值序列的差距。這也可能在沒有交易中止的情況下發生。例如，`INSERT`具有 `ON CONFLICT`子句的 會先計算to-be-inserted元組，包括進行任何必要的`nextval`呼叫，然後再偵測任何可能導致其遵循`ON CONFLICT`規則的衝突。因此，Aurora DSQL 的序列物件*無法用來取得「無間隙」序列*。  
同樣地，其他交易`setval`也會立即看到 所做的序列狀態變更，而且如果呼叫交易轉返，則不會復原。

序列函數要操作的序列由引數指定，該`regclass`引數只是`pg_class`系統目錄中序列的 OID。不過，您不需要手動查詢 OID，因為`regclass`資料類型的輸入轉換器會為您執行工作。如需詳細資訊，請參閱[物件識別符類型的](https://www.postgresql.org/docs/current/datatype-oid.html) PostgreSQL 文件。