PostgreSQL ALTER SEQUENCE

2021-09-08 16:17 更新

ALTER SEQUENCE — 更改一個序列發(fā)生器的定義

大綱

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

描述

ALTER SEQUENCE更改一個現(xiàn)有序列發(fā)生器的參數(shù)。 任何沒有在ALTER SEQUENCE命令中明確設(shè)置的參數(shù) 保持它們之前的設(shè)置。

要使用ALTER SEQUENCE,你必須擁有該序列。要更改一個序列 的模式,你還必須擁有新模式上的CREATE特權(quán)。要更改擁有者,你還必須 是新?lián)碛薪巧囊粋€直接或者間接成員,并且該角色必須具有該域的模式上的 CREATE特權(quán)(這些限制強制修改擁有者不能做一些通過刪除和重 建該序列做不到的事情。不過,一個超級用戶怎么都能更改任何序列的所有權(quán)。)。

參數(shù)

name

要修改的序列的名稱(可以是模式限定的)。

IF EXISTS

在序列不存在時不要拋出一個錯誤。這種情況下會發(fā)出一個提示。

data_type

可選子句AS data_type 改變序列的數(shù)據(jù)類型。有效類型是smallintintegerbigint。

當(dāng)且僅當(dāng)先前的最小值和最大值是舊數(shù)據(jù)類型的最小值或最大值時(換句話說, 如果序列是使用NO MINVALUENO MAXVALUE, 隱式或顯式創(chuàng)建的),則更改數(shù)據(jù)類型會自動更改序列的最小值和最大值。 否則,將保留最小值和最大值,除非將新值作為同一命令的一部分給出。 如果最小值和最大值不符合新的數(shù)據(jù)類型,則會生成錯誤。

increment

子句INCREMENT BY increment 是可選的。 一個正值將產(chǎn)生一個上升序列,一個負值會產(chǎn)生一個下降序列。如果 沒有指定,舊的增量值將被保持。

minvalue
NO MINVALUE

可選的子句MINVALUE minvalue 決定一個序列 能產(chǎn)生的最小值。如果指定了NO MINVALUE,上升序列和下降序列的默認(rèn)值分別是 1 和 數(shù)據(jù)類型的最小值。如果這些選項都沒有被指定,將保持當(dāng)前的 最小值。

maxvalue
NO MAXVALUE

可選的子句MAXVALUE maxvalue 決定一個序列 能產(chǎn)生的最大值。如果指定了NO MAXVALUE,上升序列和下降序列的默認(rèn)值分別是 數(shù)據(jù)類型的最大值和 -1。如果這些選項都沒有被指定,將保持當(dāng)前的 最大值。

start

可選的子句START WITH start 更改該序列被記錄的開始值。 這對于當(dāng)前序列值沒有影響,它會簡單地設(shè)置 未來ALTER SEQUENCE RESTART命令將會使用的值。

restart

可選的子句RESTART [ WITH restart ]更改該序列的 當(dāng)前值。這類似于用is_called = false 調(diào)用setval函數(shù):被指定的值將會被 下一次nextval調(diào)用返回。寫上沒有 restart值的 RESTART等效于提供被 CREATE SEQUENCE記錄的或者上一次被 ALTER SEQUENCE START WITH設(shè)置的開始值。

setval調(diào)用相比,序列上的RESTART 操作是事務(wù)性的并阻止并發(fā)事務(wù)從同一序列中獲取數(shù)字。 如果這不是所需的操作模式,則應(yīng)使用setval。

cache

子句CACHE cache 使得序列數(shù)字被預(yù)先 分配并且保存在內(nèi)存中以便更快的訪問。最小值是 1(每次只產(chǎn)生一個值,即 無緩存)。如果沒有指定,舊的緩沖值將被保持。

CYCLE

可選的CYCLE關(guān)鍵詞可以被用來允許該序列在達到 maxvalue(上升序列)或 minvalue(下降序列)時 回卷。如果到達該限制,下一個被產(chǎn)生的數(shù)字將分別是 minvalue或者 maxvalue

NO CYCLE

如果指定了可選的NO CYCLE關(guān)鍵詞,任何在該 序列到達其最大值后的nextval調(diào)用將會返回 一個錯誤。如果既沒有指定CYCLE也沒有指定 NO CYCLE,舊的循環(huán)行為將被保持。

OWNED BY table_name.column_name
OWNED BY NONE

OWNED BY選項導(dǎo)致該序列與一個特定的表列相關(guān)聯(lián), 這樣如果該列(或者整個表)被刪除,該序列也會被自動刪除。如果指定, 這種關(guān)聯(lián)會替代之前為該序列指定的任何關(guān)聯(lián)。被指定的表必須具有相同的 擁有者并且與該序列在同一個模式中。指定 OWNED BY NONE可以移除任何現(xiàn)有的關(guān)聯(lián),讓該序列 自立。

new_owner

該序列的新?lián)碛姓叩挠脩裘?/p>

new_name

該序列的新名稱。

new_schema

該序列的新模式。

注解

ALTER SEQUENCE將不會立即影響除當(dāng)前后端外 其他后端中的nextval結(jié)果,因為它們有預(yù)分配(緩存)的序列 值。在注意到序列生成參數(shù)被更改之前它們將用盡所有緩存的值。當(dāng)前后端將被 立刻影響。

ALTER SEQUENCE不會影響該序列的 currval狀態(tài)(在 PostgreSQL 8.3 之前有時會影響)。

ALTER SEQUENCE阻塞并發(fā)nextvalcurrval、lastvalsetval調(diào)用。

由于歷史原因,ALTER TABLE也可以被用于序列, 但是只有等效于上述形式的ALTER TABLE變體才被 允許用于序列。

示例

在 105 重啟一個被稱為serial的序列:

ALTER SEQUENCE serial RESTART WITH 105;

兼容性

ALTER SEQUENCE符合SQL 標(biāo)準(zhǔn),不過AS、START WITHOWNED BY、OWNER TORENAME TO 以及 SET SCHEMA子句是 PostgreSQL擴展。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號