

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

`ALTER SEQUENCE`: altera a definição de um gerador de sequência.

**Importante**  
Ao usar sequências, é necessário considerar cuidadosamente o valor do cache. Para ter mais informações, consulte o texto explicativo “Importante” na página [`CREATE SEQUENCE`](create-sequence-syntax-support.md).  
Para obter orientações sobre a melhor forma de usar sequências com base nos padrões de workload, consulte [Trabalhar com sequências e colunas de identidade](sequences-identity-columns-working-with.md).

## Sintaxe compatível
<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
```

## Descrição
<a name="alter-sequence-description"></a>

`ALTER SEQUENCE` altera os parâmetros de um gerador de sequência existente. Todos os parâmetros não definidos especificamente no comando `ALTER SEQUENCE` mantêm as configurações anteriores.

Para usar `ALTER SEQUENCE`, a sequência deve pertencer a você. Para alterar o esquema de uma sequência, também é necessário ter o privilégio `CREATE` no novo esquema. Para alterar o proprietário, você deve poder aplicar `SET ROLE` ao novo perfil de propriedade, o qual deve ter o privilégio `CREATE` no esquema da sequência. (Essas restrições determinam que a alteração do proprietário não faz nada que você não possa fazer ao remover e recriar a sequência. No entanto, em todo caso, um superusuário pode alterar a propriedade de qualquer sequência.)

## Parâmetros
<a name="alter-sequence-parameters"></a>

***name***  
O nome (opcionalmente qualificado para o esquema) de uma sequência a ser alterada.

**`IF EXISTS`**  
Não gerará um erro se a sequência não existir. Um aviso é emitido nesse caso.

***increment***  
Qualquer cláusula `INCREMENT BY increment` é opcional. Um valor positivo criará uma sequência crescente; um valor negativo criará uma sequência decrescente. Se não for especificado, o valor de incremento antigo será mantido.

***minvalue* / `NO MINVALUE`**  
A cláusula opcional `MINVALUE minvalue` determina o valor mínimo que uma sequência pode gerar. Se `NO MINVALUE` for especificado, serão usados os padrões 1 e do valor mínimo do tipo de dados para sequências crescentes e decrescentes, respectivamente. Se nenhuma dessas opções for especificada, o valor mínimo atual será mantido.

***maxvalue* / `NO MAXVALUE`**  
A cláusula opcional `MAXVALUE maxvalue` determina o valor máximo da sequência. Se `NO MAXVALUE` for especificado, serão usados os padrões do valor máximo do tipo de dados e -1 para sequências crescentes e decrescentes, respectivamente. Se nenhuma dessas opções for especificada, o valor máximo atual será mantido.

**`CYCLE`**  
A palavra-chave `CYCLE` opcional pode ser usada para permitir que a sequência seja contornada quando o *maxvalue* ou *minvalue* for atingido por uma sequência crescente ou decrescente, respectivamente. Se o limite for atingido, o próximo número gerado será o *minvalue* ou *maxvalue*, respectivamente.

**`NO CYCLE`**  
Se a palavra-chave `NO CYCLE` opcional for especificada, qualquer chamada para `nextval` depois que a sequência atingir o valor máximo exibirá um erro. Se tanto `CYCLE` quanto `NO CYCLE` não forem especificados, o comportamento do ciclo antigo será mantido.

***start***  
A cláusula opcional `START WITH start` altera o valor inicial registrado da sequência. Isso não tem efeito no valor da sequência atual; simplesmente define o valor que os futuros comandos `ALTER SEQUENCE RESTART` usarão.

***reiniciar***  
A cláusula opcional `RESTART [ WITH restart ]` altera o valor atual da sequência. Isso é semelhante a chamar a função `setval` com `is_called` = `false`: o valor especificado será exibido na próxima chamada de `nextval`. Escrever `RESTART` sem valor de *reinicialização* equivale a fornecer o valor inicial que foi registrado por `CREATE SEQUENCE` ou definido pela última vez por`ALTER SEQUENCE START WITH`.  
Ao contrário de uma chamada `setval`, uma operação `RESTART` em uma sequência é transacional e impede que transações simultâneas obtenham números da mesma sequência. Se esse não for o modo de operação desejado, deve-se usar `setval`.

***cache***  
A cláusula `CACHE cache` permite a pré-alocação e o armazenamento de números de sequência na memória para que o acesso seja mais rápido. O valor deve ser 1 ou algum valor >= 65.536. Se não for especificado, o valor de cache antigo será mantido. Para ter mais informações sobre comportamentos de cache, consulte [`CREATE SEQUENCE`](create-sequence-syntax-support.md).

**`OWNED BY table_name.column_name` / `OWNED BY NONE`**  
A opção `OWNED BY` faz com que a sequência seja associada a uma coluna específica da tabela, de forma que, se essa coluna (ou a tabela inteira) for eliminada, a sequência também será automaticamente eliminada. Se especificada, essa associação substitui qualquer associação especificada anteriormente para a sequência. A tabela especificada deve ter o mesmo proprietário e estar no mesmo esquema que a sequência. A especificação `OWNED BY NONE` remove qualquer associação existente, tornando a sequência “independente”.

***new\$1owner***  
O nome de usuário do novo proprietário da sequência.

***new\$1name***  
O novo nome da sequência.

***new\$1schema***  
O novo esquema para a sequência.

## Observações
<a name="alter-sequence-notes"></a>

`ALTER SEQUENCE` não afetará imediatamente os resultados de `nextval` em backends que tenham valores de sequência pré-alocados (armazenados em cache), a não ser no atual. Eles usarão todos os valores armazenados em cache antes de perceber os parâmetros de geração de sequência alterados. O backend atual será afetado imediatamente.

`ALTER SEQUENCE` não afeta o status `currval` da sequência.

`ALTER SEQUENCE` pode provocar outras transações no OCC.

Por motivos históricos, `ALTER TABLE` também pode ser usado com sequências, mas as únicas variantes de `ALTER TABLE` permitidas com sequências são equivalentes aos formulários mostrados acima.

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

Reinicie uma sequência chamada `serial`, em 105:

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

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

`ALTER SEQUENCE` segue o padrão SQL, exceto para as cláusulas `AS`, `START WITH`, `OWNED BY`, `OWNER TO`, `RENAME TO` e `SET SCHEMA`, que são extensões do PostgreSQL.