

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

`ALTER SEQUENCE`: cambiar la definición de un generador de secuencias.

**importante**  
Al utilizar secuencias, se debe tener muy en cuenta el valor de la caché. Para obtener más información, consulte el aviso Importante de la página [`CREATE SEQUENCE`](create-sequence-syntax-support.md).  
Para obtener orientación sobre cómo utilizar mejor las secuencias basadas en patrones de carga de trabajo, consulte [Trabajar con secuencias y columnas de identidad](sequences-identity-columns-working-with.md).

## Sintaxis admitida
<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
```

## Descripción
<a name="alter-sequence-description"></a>

`ALTER SEQUENCE` cambia los parámetros de un generador de secuencias existente. Todos los parámetros que no estén establecidos específicamente en el comando `ALTER SEQUENCE` conservan su configuración anterior.

Debe ser el propietario de la secuencia para utilizar `ALTER SEQUENCE`. Para modificar el esquema de una secuencia, también debe tener el privilegio `CREATE` en el nuevo esquema. Para modificar el propietario, debe poder utilizar `SET ROLE` en el nuevo rol de propietario y ese rol debe tener el privilegio `CREATE` en el esquema de la secuencia. (Estas restricciones garantizan que modificar el propietario no haga nada que no se pueda hacer eliminando y volviendo a crear la secuencia. Sin embargo, un superusuario puede cambiar la propiedad de cualquier secuencia de todos modos).

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

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

**`IF EXISTS`**  
No se genera un error si la secuencia no existe. En este caso, se emite un aviso.

***incremento***  
La cláusula `INCREMENT BY increment` es opcional. Un valor positivo formará una secuencia ascendente y 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 `CYCLE` opcional se puede utilizar para permitir que la secuencia se repita cuando los valores *maxvalue* o *minvalue* se han alcanzado mediante una secuencia ascendente o descendente, respectivamente. Si se alcanza el límite, el siguiente número generado será el valor *minvalue* o *maxvalue*, respectivamente.

**`NO CYCLE`**  
Si se especifica la palabra clave `NO CYCLE` opcional, cualquier llamada a `nextval` después de que la secuencia haya alcanzado su máximo valor devolverá un error. Si no se especifica `CYCLE` ni `NO CYCLE`, se mantendrá el comportamiento del ciclo antiguo.

***iniciar***  
La cláusula opcional `START WITH start` cambia el valor inicial registrado de la secuencia. Esto no afecta al valor de secuencia actual; simplemente establece el valor que utilizarán los 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 se devolverá en la siguiente llamada de `nextval`. Escribir `RESTART` sin un valor de *reinicio* equivale a proporcionar el valor inicial registrado por `CREATE SEQUENCE` o establecido por última vez por `ALTER SEQUENCE START WITH`.  
A diferencia de una llamada de `setval`, una operación `RESTART` en una secuencia es transaccional e impide que las transacciones simultáneas obtengan números de la misma secuencia. Si ese no es el modo de operación deseado, debería usarse `setval`.

***cache***  
La cláusula `CACHE cache` permite preasignar números de secuencia y almacenarlos en la memoria para un acceso más rápido. El valor debe ser 1 o algún valor >= 65536. Si no se especifica, se mantendrá el valor de caché antiguo. Para obtener más información sobre el comportamiento de la caché, consulte las instrucciones que se incluyen en [`CREATE SEQUENCE`](create-sequence-syntax-support.md).

**`OWNED BY table_name.column_name` / `OWNED BY NONE`**  
La opción `OWNED BY` hace que la secuencia se asocie a una columna de tabla específica, de modo que si se elimina esa columna (o su tabla completa), la secuencia también se eliminará automáticamente. Si se especifica, esta asociación reemplaza cualquier asociación previamente especificada 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\$1owner***  
El nombre de usuario del nuevo propietario de la secuencia.

***new\$1name***  
El nuevo nombre de la secuencia.

***new\$1schema***  
El nuevo esquema de la secuencia.

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

`ALTER SEQUENCE` no afectará inmediatamente a los resultados de `nextval` en los backends, salvo en el actual, que tienen valores de secuencia preasignados (almacenados en caché). Utilizarán todos los valores en caché antes de detectar los parámetros de generación de secuencias modificados. El backend actual se verá afectado de forma inmediata.

`ALTER SEQUENCE` no afecta al estado de `currval` para la secuencia.

`ALTER SEQUENCE` puede provocar otras transacciones a OCC.

Por razones históricas, `ALTER TABLE` también se puede utilizar con secuencias; pero las variantes de `ALTER TABLE` que se permiten con secuencias son solo las equivalentes a las formas mostradas anteriormente.

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

Reinicie una secuencia llamada `serial` en 105:

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

## Compatibilidad
<a name="alter-sequence-compatibility"></a>

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