ALTER SEQUENCE

ALTER SEQUENCE — modifica a definição de um gerador de sequência

Sinopse

ALTER SEQUENCE [ IF EXISTS ] nome_da_sequência
    [ AS tipo_de_dados ]
    [ INCREMENT [ BY ] incremento ]
    [ MINVALUE valor_mínimo | NO MINVALUE ]
    [ MAXVALUE valor_máximo | NO MAXVALUE ]
    [ [ NO ] CYCLE ]
    [ START [ WITH ] início ]
    [ RESTART [ [ WITH ] reinício ] ]
    [ CACHE cache ]
    [ OWNED BY { nome_da_tabela.nome_da_coluna | NONE } ]
ALTER SEQUENCE [ IF EXISTS ] nome_da_sequência​
    SET { LOGGED | UNLOGGED }
ALTER SEQUENCE [ IF EXISTS ] nome_da_sequência​
    OWNER TO {
        novo_dono
      | CURRENT_ROLE
      | CURRENT_USER
      | SESSION_USER
    }
ALTER SEQUENCE [ IF EXISTS ] nome_da_sequência​
    RENAME TO novo_nome
ALTER SEQUENCE [ IF EXISTS ] nome_da_sequência​
    SET SCHEMA novo_esquema

Descrição

O comando ALTER SEQUENCE altera os parâmetros de um gerador de sequência existente. Quaisquer parâmetros não definidos especificamente no comando ALTER SEQUENCE mantêm suas definições anteriores.

É necessário ser o dono da sequência para executar o comando ALTER SEQUENCE. Para alterar o esquema da sequência, também é necessário possuir o privilégio CREATE no novo esquema. Para alterar o dono, é necessário ser capaz de executar o comando SET ROLE para a função de banco de dados (role) que será a nova dona, e esta função de banco de dados precisa possuir o privilégio CREATE no esquema da sequência. (Estas restrições impõem que alterar o dono não faz nada que não poderia ser feito excluindo e recriando a sequência. Entretanto, um superusuário pode alterar o dono de qualquer sequência.)

Parâmetros

nome_da_sequência

O nome (opcionalmente qualificado pelo esquema) da sequência a ser alterada.

IF EXISTS

Não será relatado nenhum erro se a sequência não existir. É emitido um aviso neste caso.

tipo_de_dados

A cláusula opcional AS tipo_de_dados altera o tipo de dados da sequência. Os tipos de dados válidos são smallint, integer, e bigint.

Alterar o tipo de dados altera automaticamente os valores mínimo e máximo da sequência se, e somente se, os valores mínimo e máximo anteriores forem o valor mínimo ou máximo do tipo de dados antigo (em outras palavras, se a sequência foi criada usando NO MINVALUE ou NO MAXVALUE, implícita ou explicitamente). Caso contrário, os valores mínimo e máximo são preservados, a menos que novos valores sejam fornecidos como parte do mesmo comando. Se os valores mínimo e máximo não se encaixarem no novo tipo de dados, será gerado um erro.

incremento

A cláusula INCREMENT BY incremento é opcional. Um valor positivo cria uma sequência ascendente, e um valor negativo cria uma sequência descendente. Se não for especificado, o valor de incremento antigo será mantido.

valor_mínimo
NO MINVALUE

A cláusula opcional MINVALUE valor_mínimo determina o valor mínimo que a sequência pode gerar. Se for especificado NO MINVALUE, serão usados os valores padrão 1 e valor mínimo do tipo de dados, para sequências ascendentes e descendentes, respectivamente. Se nenhuma dessas opções for especificada, o valor mínimo corrente será mantido.

valor_máximo
NO MAXVALUE

A cláusula opcional MAXVALUE valor_máximo determina o valor máximo que a sequência pode gerar. Se for especificado NO MAXVALUE , serão utilizados os valores padrão valor máximo do tipo de dados e -1 para sequências ascendentes e descendentes, respectivamente. Se nenhuma dessas opções for especificada, o valor máximo corrente será mantido.

CYCLE

A palavra-chave opcional CYCLE pode ser usada para permitir que a sequência se repita quando o valor_máximo ou o valor_mínimo for atingido por uma sequência ascendente ou descendente, respectivamente. Caso o limite seja atingido, o próximo número gerado será o valor_mínimo ou o valor_máximo, respectivamente.

NO CYCLE

Se for especificada a palavra-chave opcional NO CYCLE, qualquer chamada à função nextval após a sequência atingir seu valor máximo retornará um erro. Se não for especificado CYCLE ou NO CYCLE, será mantido o comportamento antigo de ciclo.

início

A cláusula opcional START WITH início altera o valor de início registrado da sequência. Não afeta o valor corrente da sequência; simplesmente define o valor que os futuros comandos ALTER SEQUENCE RESTART usarão.

reinício

A cláusula opcional RESTART [ WITH reinício ] altera o valor corrente da sequência. É semelhante a chamar a função setval com is_called = false: o valor especificado será retornado pela próxima chamada a nextval. Escrever RESTART sem o valor de reinício, é equivalente a fornecer o valor inicial registrado por CREATE SEQUENCE, ou definido da última vez por ALTER SEQUENCE START WITH.

Contrastando com a chamada a setval, uma operação RESTART em uma sequência é transacional, impedindo que transações simultâneas obtenham números da mesma sequência. Se não for este o modo de operação desejado, deverá ser usado setval.

cache

A cláusula opcional CACHE cache especifica quantos números da sequência devem ser pré-alocados e armazenados na memória para acesso mais rápido. O valor mínimo é 1 (somente um valor pode ser gerado por vez, ou seja, sem cache). Se não for especificado, será mantido o valor antigo do cache.

SET { LOGGED | UNLOGGED }

Esta cláusula altera a sequência de não registrado para registrado (WAL), ou vice-versa. (veja CREATE SEQUENCE). Não pode ser aplicada a uma sequência temporária.

OWNED BY nome_da_tabela.nome_da_coluna
OWNED BY NONE

A opção OWNED BY faz com que a sequência seja associada a uma coluna específica da tabela, de modo que, se esta coluna (ou toda a tabela) for excluída, a sequência também será automaticamente excluída. A tabela especificada deve ter o mesmo dono, e estar no mesmo esquema da sequência. Especificar OWNED BY NONE remove qualquer associação existente, tornando a sequência independente.

novo_dono

O nome de usuário do novo dono da sequência.

novo_nome

O novo nome da sequência.

novo_esquema

O novo esquema para a sequência.

Notas

O comando ALTER SEQUENCE não afeta imediatamente os resultados de nextval dos processos servidores, além do corrente, que possuem valores de sequência pré-alocados (em cache). Serão usarão todos os valores armazenados em cache antes de perceber que os parâmetros de geração de sequência foram alterados. O processo servidor corrente será afetado imediatamente.

O comando ALTER SEQUENCE não afeta o status de currval da sequência. (Antes do PostgreSQL 8.3 às vezes isto acontecia.)

O comando ALTER SEQUENCE bloqueia chamadas a nextval, currval, lastval, e setval concorrentes.

Por razões históricas, o comando ALTER TABLE também pode ser usado com sequências; mas as únicas variantes de ALTER TABLE permitidas com sequências são equivalentes às formas mostradas acima.

Exemplos

Reiniciar uma sequência chamada serial, em 105:

ALTER SEQUENCE serial RESTART WITH 105;

Conformidade

O comando ALTER SEQUENCE está em conformidade com o padrão SQL, exceto pelas cláusulas AS, START WITH, OWNED BY, OWNER TO, RENAME TO, e SET SCHEMA, que são extensões do PostgreSQL.

Veja também

CREATE SEQUENCE, DROP SEQUENCE