ALTER SEQUENCE

ALTER SEQUENCE — cambiar la definición de un generador de secuencias

Synopsis

ALTER SEQUENCE [ IF EXISTS ] name
    [ AS data_type ]
    [ 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 SET { LOGGED | UNLOGGED }
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

Descripción

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).

Parámetros

name

El nombre (opcionalmente calificado por esquema) de una secuencia que se va a modificar.

IF EXISTS

No arrojar un error si la secuencia no existe. En este caso se emite un aviso (notice).

data_type

La cláusula opcional AS data_type cambia el tipo de datos de la secuencia. Los tipos válidos son smallint, 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 increment 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.

minvalue
NO MINVALUE

La cláusula opcional MINVALUE minvalue determina el valor mínimo que puede generar una secuencia. Si se especifica NO 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.

maxvalue
NO MAXVALUE

La cláusula opcional MAXVALUE maxvalue determina el valor máximo para la secuencia. Si se especifica NO 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 start 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 ALTER SEQUENCE RESTART.

restart

La cláusula opcional RESTART [ WITH restart ] cambia el valor actual de la secuencia. Esto es similar a llamar a la función 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 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.

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_name
OWNED 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_owner

El nombre de usuario del nuevo propietario de la secuencia.

new_name

El nuevo nombre para la secuencia.

new_schema

El nuevo esquema para la secuencia.

Notas

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.

Ejemplos

Reiniciar una secuencia llamada serial, en 105:

ALTER SEQUENCE serial RESTART WITH 105;

Compatibilidad

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.

Véase también

CREATE SEQUENCE, DROP SEQUENCE