本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
序列處理函式
本節說明在序列物件上操作的函數,也稱為序列產生器或僅序列。序列物件是使用 建立的特殊單列資料表CREATE SEQUENCE。序列物件通常用於為資料表的資料列產生唯一識別符。序列函數提供簡單、多使用者安全的方法來從序列物件取得連續的序列值。
重要
使用序列時,應仔細考慮快取值。如需詳細資訊,請參閱 CREATE SEQUENCE 頁面上的重要標註。
如需如何根據工作負載模式以最佳方式使用序列的指導,請參閱 使用序列和身分資料欄。
| 函式 | Description |
|---|---|
nextval ( regclass ) → bigint |
將序列物件推進到下一個值,並傳回該值。這是以原子方式完成的:即使多個工作階段nextval同時執行,每個工作階段都會安全地收到不同的序列值。如果序列物件已使用預設參數建立,後續nextval呼叫將傳回以 1 開頭的遞增值。您可以在 CREATE SEQUENCE命令中使用適當的參數來取得其他行為。此函數需要 序列上的 USAGE或 UPDATE權限。 |
setval ( regclass, bigint [, boolean ] ) → bigint |
設定序列物件的目前值,並選擇性地設定其is_called旗標。雙參數形式會將序列的 last_value 欄位設定為指定的值,並將其is_called欄位設定為 true,這表示下一個 nextval會在傳回值之前推進序列。將報告的值currval也會設定為指定的值。在三參數形式中, is_called 可以設定為 true或 false。 true 具有與雙參數形式相同的效果。如果設定為 false,下一個 nextval會傳回確切指定的值,而序列提升會從下列 開始nextval。此外,此處currval不會變更 回報的值。例如:傳回的結果 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資料類型的輸入轉換器會為您執行工作。如需詳細資訊,請參閱物件識別符類型的