PostgreSQL ALTER SEQUENCE

2021-09-08 16:17 更新

ALTER SEQUENCE — 更改一個(gè)序列發(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更改一個(gè)現(xiàn)有序列發(fā)生器的參數(shù)。 任何沒(méi)有在ALTER SEQUENCE命令中明確設(shè)置的參數(shù) 保持它們之前的設(shè)置。

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

參數(shù)

name

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

IF EXISTS

在序列不存在時(shí)不要拋出一個(gè)錯(cuò)誤。這種情況下會(huì)發(fā)出一個(gè)提示。

data_type

可選子句AS data_type 改變序列的數(shù)據(jù)類(lèi)型。有效類(lèi)型是smallint、integerbigint

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

increment

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

minvalue
NO MINVALUE

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

maxvalue
NO MAXVALUE

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

start

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

restart

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

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

cache

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

CYCLE

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

NO CYCLE

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

OWNED BY table_name.column_name
OWNED BY NONE

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

new_owner

該序列的新?lián)碛姓叩挠脩?hù)名。

new_name

該序列的新名稱(chēng)。

new_schema

該序列的新模式。

注解

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

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

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

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

示例

在 105 重啟一個(gè)被稱(chēng)為serial的序列:

ALTER SEQUENCE serial RESTART WITH 105;

兼容性

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)