ALTER SEQUENCE — cambiar la definición de un generador de secuencias
ALTER SEQUENCE [ IF EXISTS ]name[ ASdata_type] [ INCREMENT [ BY ]increment] [ MINVALUEminvalue| NO MINVALUE ] [ MAXVALUEmaxvalue| NO MAXVALUE ] [ [ NO ] CYCLE ] [ START [ WITH ]start] [ RESTART [ [ WITH ]restart] ] [ CACHEcache] [ OWNED BY {table_name.column_name| NONE } ] ALTER SEQUENCE [ IF EXISTS ]nameSET { LOGGED | UNLOGGED } ALTER SEQUENCE [ IF EXISTS ]nameOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SEQUENCE [ IF EXISTS ]nameRENAME TOnew_nameALTER SEQUENCE [ IF EXISTS ]nameSET SCHEMAnew_schema
ALTER SEQUENCE cambia los parámetros de un
generador de secuencias existente. Cualquier parámetro que no se establezca
específicamente en el comando ALTER SEQUENCE conserva
su configuración anterior.
Debes ser el propietario de la secuencia para usar ALTER SEQUENCE.
Para cambiar el esquema de una secuencia, también debes tener el privilegio CREATE
en el nuevo esquema.
Para cambiar el propietario, debes ser capaz de hacer SET ROLE al
nuevo rol propietario, y ese rol debe tener el privilegio CREATE
en el esquema de la secuencia.
(Estas restricciones garantizan que cambiar el propietario no permita hacer
nada que no pudieras hacer eliminando y volviendo a crear la secuencia.
Sin embargo, un superusuario puede cambiar la propiedad de cualquier secuencia de todos modos).
nameEl nombre (opcionalmente calificado por esquema) de una secuencia que se va a modificar.
IF EXISTSNo arrojar un error si la secuencia no existe. En este caso se emite un aviso (notice).
data_type
La cláusula opcional AS
cambia el tipo de datos de la secuencia. Los tipos válidos son
data_typesmallint, integer
y bigint.
Cambiar el tipo de datos cambia automáticamente los valores mínimo y máximo
de la secuencia si y solo si los valores mínimo y máximo anteriores eran el
valor mínimo o máximo del tipo de datos antiguo (en otras palabras, si la
secuencia se había creado utilizando NO MINVALUE o
NO MAXVALUE, implícita o explícitamente). De lo contrario,
se conservan los valores mínimo y máximo, a menos que se proporcionen nuevos
valores como parte del mismo comando. Si los valores mínimo y máximo no caben
en el nuevo tipo de datos, se generará un error.
increment
La cláusula INCREMENT BY es
opcional. Un valor positivo creará una secuencia ascendente, uno
negativo una secuencia descendente. Si no se especifica, se mantendrá
el valor de incremento anterior.
increment
minvalueNO MINVALUE
La cláusula opcional MINVALUE determina
el valor mínimo que puede generar una secuencia. Si se especifica minvalueNO
MINVALUE, se utilizarán los valores predeterminados de 1 y
el valor mínimo del tipo de datos para secuencias ascendentes y descendentes,
respectivamente. Si no se especifica ninguna opción, se mantendrá el
valor mínimo actual.
maxvalueNO MAXVALUE
La cláusula opcional MAXVALUE determina
el valor máximo para la secuencia. Si se especifica maxvalueNO
MAXVALUE, se utilizarán los valores predeterminados del
valor máximo del tipo de datos y -1 para secuencias ascendentes y descendentes,
respectivamente. Si no se especifica ninguna opción, se mantendrá el
valor máximo actual.
CYCLE
La palabra clave opcional CYCLE se puede usar para permitir
que la secuencia vuelva a empezar (dar la vuelta) cuando una secuencia ascendente
o descendente haya alcanzado el maxvalue
o minvalue respectivamente. Si se
alcanza el límite, el siguiente número generado será el
minvalue o el
maxvalue, respectivamente.
NO CYCLE
Si se especifica la palabra clave opcional NO CYCLE,
cualquier llamada a nextval después de que la secuencia haya
alcanzado su valor máximo devolverá un error. Si no se especifica ni
CYCLE ni NO CYCLE, se mantendrá
el comportamiento de ciclo anterior.
start
La cláusula opcional START WITH cambia el
valor de inicio registrado de la secuencia. Esto no tiene efecto en el
valor actual de la secuencia; simplemente establece el
valor que usarán futuros comandos startALTER SEQUENCE RESTART.
restart
La cláusula opcional RESTART [ WITH cambia el
valor actual de la secuencia. Esto es similar a llamar a la función
restart ]setval con is_called =
false: el valor especificado será devuelto por la
siguiente llamada a nextval.
Escribir RESTART sin un valor de restart es equivalente a proporcionar el
valor de inicio registrado por CREATE SEQUENCE o el
último establecido por ALTER SEQUENCE START WITH.
A diferencia de una llamada a setval,
una operación RESTART en una secuencia es transaccional
y bloquea las transacciones concurrentes para que no obtengan números de la
misma secuencia. Si ese no es el modo de operación deseado, se debe usar
setval.
cache
La cláusula CACHE permite preasignar
números de secuencia y almacenarlos en memoria para un acceso más rápido.
El valor mínimo es 1 (solo se puede generar un valor a la vez, es decir,
sin caché). Si no se especifica, se mantendrá el valor de caché anterior.
cache
SET { LOGGED | UNLOGGED }Esta forma cambia la secuencia de no registrada (unlogged) a registrada (logged) o viceversa (consulta CREATE SEQUENCE). No se puede aplicar a una secuencia temporal.
OWNED BY table_name.column_nameOWNED BY NONE
La opción OWNED BY hace que la secuencia se asocie
con una columna de tabla específica, de modo que si esa columna (o toda
su tabla) se elimina, la secuencia también se eliminará automáticamente.
Si se especifica, esta asociación reemplaza cualquier asociación especificada
previamente para la secuencia. La tabla especificada debe tener el mismo
propietario y estar en el mismo esquema que la secuencia.
Especificar OWNED BY NONE elimina cualquier asociación
existente, haciendo que la secuencia sea “independiente”.
new_ownerEl nombre de usuario del nuevo propietario de la secuencia.
new_nameEl nuevo nombre para la secuencia.
new_schemaEl nuevo esquema para la secuencia.
ALTER SEQUENCE no afectará inmediatamente a los
resultados de nextval en las sesiones del backend, aparte de la
actual, que tengan valores de secuencia preasignados (en caché).
Agotarán todos los valores en caché antes de notar los parámetros de generación
de secuencias modificados. El backend actual se verá afectado de inmediato.
ALTER SEQUENCE no afecta el estado de currval
para la secuencia. (Antes de PostgreSQL
8.3, a veces lo hacía).
ALTER SEQUENCE bloquea las llamadas concurrentes a
nextval, currval,
lastval y setval.
Por razones históricas, ALTER TABLE también se puede usar con
secuencias; pero las únicas variantes de ALTER TABLE que se permiten
con secuencias son equivalentes a las formas mostradas anteriormente.
Reiniciar una secuencia llamada serial, en 105:
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCE cumple con el estándar SQL,
excepto por las cláusulas AS, START WITH,
OWNED BY, OWNER TO, RENAME TO y
SET SCHEMA, que son extensiones de
PostgreSQL.