ALTER SEQUENCE — modifica a definição de um gerador de sequência
ALTER SEQUENCE [ IF EXISTS ]nome_da_sequência[ AStipo_de_dados] [ INCREMENT [ BY ]incremento] [ MINVALUEvalor_mínimo| NO MINVALUE ] [ MAXVALUEvalor_máximo| NO MAXVALUE ] [ [ NO ] CYCLE ] [ START [ WITH ]início] [ RESTART [ [ WITH ]reinício] ] [ CACHEcache] [ 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 TOnovo_nomeALTER SEQUENCE [ IF EXISTS ]nome_da_sequência SET SCHEMAnovo_esquema
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.)
nome_da_sequênciaO nome (opcionalmente qualificado pelo esquema) da sequência a ser alterada.
IF EXISTSNã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
altera o tipo de dados da sequência.
Os tipos de dados válidos são tipo_de_dadossmallint,
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
é 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.
incremento
valor_mínimoNO MINVALUE
A cláusula opcional
MINVALUE
determina o valor mínimo que a sequência pode gerar.
Se for especificado valor_mínimoNO 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áximoNO MAXVALUE
A cláusula opcional
MAXVALUE
determina o valor máximo que a sequência pode gerar.
Se for especificado valor_máximoNO 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
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
inícioALTER SEQUENCE RESTART usarão.
reinício
A cláusula opcional
RESTART [ WITH
altera o valor corrente da sequência.
É semelhante a chamar a função reinício ]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
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.
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_colunaOWNED 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_donoO nome de usuário do novo dono da sequência.
novo_nomeO novo nome da sequência.
novo_esquemaO novo esquema para a sequência.
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.
Reiniciar uma sequência chamada serial, em 105:
ALTER SEQUENCE serial RESTART WITH 105;
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.