

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

# `ALTER SEQUENCE`
<a name="alter-sequence-syntax-support"></a>

`ALTER SEQUENCE` — 變更序列產生器的定義。

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

## 支援的語法
<a name="alter-sequence-supported-syntax"></a>

```
ALTER SEQUENCE [ IF EXISTS ] name
    [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ [ NO ] CYCLE ]
    [ START [ WITH ] start ]
    [ RESTART [ [ WITH ] restart ] ]
    [ CACHE cache ]
    [ OWNED BY { table_name.column_name | NONE } ]
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_name
ALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema

where cache is 1 or cache >= 65536
```

## Description
<a name="alter-sequence-description"></a>

`ALTER SEQUENCE` 會變更現有序列產生器的參數。`ALTER SEQUENCE` 命令中未特別設定的任何參數都會保留其先前的設定。

您必須擁有序列才能使用 `ALTER SEQUENCE`。若要變更序列的結構描述，您還必須具有新結構描述`CREATE`的權限。若要更改擁有者，您必須能夠`SET ROLE`使用新的擁有角色，且該角色必須具有序列結構描述`CREATE`的權限。（這些限制會強制變更擁有者不會執行您捨棄並重新建立序列而無法執行的任何動作。 不過，超級使用者可以改變任何序列的擁有權。)

## Parameters
<a name="alter-sequence-parameters"></a>

***name***  
要變更之序列的名稱 （選擇性符合結構描述資格）。

**`IF EXISTS`**  
如果序列不存在，請勿擲回錯誤。在此情況下會發出通知。

***增量***  
子句`INCREMENT BY increment`是選用的。正值將使遞增序列，負值將遞減序列。如果未指定，則會維持舊的增量值。

***minvalue* / `NO MINVALUE`**  
選用子句`MINVALUE minvalue`決定序列可以產生的最小值。如果`NO MINVALUE`指定 ，則會分別使用 1 的預設值和遞增和遞減序列的資料類型最小值。如果未指定任何選項，則會維持目前的最小值。

***maxvalue* / `NO MAXVALUE`**  
選用子句`MAXVALUE maxvalue`決定序列的最大值。如果`NO MAXVALUE`指定 ，則會分別使用資料類型的最大值預設值和遞增和遞減序列的 -1。如果未指定任何選項，則會維持目前的最大值。

**`CYCLE`**  
當遞增或遞減序列分別達到*最大值*或*最小值*時，選用`CYCLE`的關鍵字可用來讓序列包裝。如果達到限制，產生的下一個數字將分別是*最小值*或*最大值*。

**`NO CYCLE`**  
如果指定選用`NO CYCLE`關鍵字，則在序列達到其最大值`nextval`之後對 的任何呼叫都會傳回錯誤。如果未指定 `CYCLE`或 `NO CYCLE` ，則會維持舊的週期行為。

***start***  
選用子句會`START WITH start`變更序列的記錄開始值。這不會影響目前的序列值；它只會設定未來`ALTER SEQUENCE RESTART`命令將使用的值。

***重新啟動***  
選用子句會`RESTART [ WITH restart ]`變更序列的目前值。這類似於使用 `is_called` = 呼叫 `setval`函數`false`：下次呼叫 會傳回指定的值`nextval`。沒有*重新啟動*值`RESTART`的寫入相當於提供由 記錄的開始值`CREATE SEQUENCE`，或由 上次設定`ALTER SEQUENCE START WITH`。  
與`setval`呼叫相反，序列上的`RESTART`操作是交易的，並封鎖並行交易從相同序列取得數字。如果這不是所需的操作模式，`setval`則應使用 。

***快取***  
子句`CACHE cache`可讓序號預先配置並存放在記憶體中，以加快存取速度。值必須為 1 或某個值 >= 65536。如果未指定，則會保留舊快取值。如需快取行為的詳細資訊，請參閱 下的指引[`CREATE SEQUENCE`](create-sequence-syntax-support.md)。

**`OWNED BY table_name.column_name` / `OWNED BY NONE`**  
`OWNED BY` 選項會導致序列與特定資料表資料欄相關聯，因此如果捨棄該資料欄 （或其整個資料表），序列也會自動捨棄。如果指定，此關聯會取代先前為序列指定的任何關聯。指定的資料表必須具有相同的擁有者，且與序列位於相同的結構描述中。指定 會`OWNED BY NONE`移除任何現有的關聯，使序列「獨立」。

***new\$1owner***  
序列新擁有者的使用者名稱。

***new\$1name***  
序列的新名稱。

***new\$1schema***  
序列的新結構描述。

## 備註
<a name="alter-sequence-notes"></a>

`ALTER SEQUENCE` 除了目前已預先配置 （快取） 序列值的後端之外， 不會立即影響後端`nextval`的結果。在注意到已變更的序列產生參數之前，他們會先用完所有快取的值。目前的後端會立即受到影響。

`ALTER SEQUENCE` 不會影響序列`currval`的狀態。

`ALTER SEQUENCE` 可能會導致其他交易進入 OCC。

基於歷史原因， 也可以與序列`ALTER TABLE`搭配使用；但唯一允許與序列搭配使用`ALTER TABLE`的變體等同於上述表單。

## 範例
<a name="alter-sequence-examples"></a>

在 105 `serial`重新啟動名為 的序列：

```
ALTER SEQUENCE serial RESTART WITH 105;
```

## 相容性
<a name="alter-sequence-compatibility"></a>

`ALTER SEQUENCE` 符合 SQL 標準，但 `AS`、、`RENAME TO`、、 `START WITH` `OWNED BY` `OWNER TO`和 `SET SCHEMA`子句除外，其為 PostgreSQL 擴充功能。