Funções de manipulação de sequências
Esta seção descreve funções para operar em objetos de sequência, também chamados de geradores de sequência ou apenas sequências. Objetos de sequência são tabelas especiais de linha única criadas comCREATE SEQUENCE. Eles são comumente usados para gerar identificadores exclusivos para linhas de uma tabela. As funções de sequência oferecem métodos simples e seguros para vários usuários quando se deseja obter valores de sequência sucessivos de objetos 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.
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.
| Função | Descrição |
|---|---|
nextval ( regclass ) → bigint |
Avança o objeto de sequência para o próximo valor e exibe esse valor. Isso é feito atomicamente: mesmo que várias sessões executem nextval simultaneamente, cada uma receberá com segurança um valor de sequência distinto. Se o objeto de sequência tiver sido criado com parâmetros padrão, as chamadas nextval sucessivas exibirão valores crescentes que começam com 1. Outros comportamentos podem ser obtidos usando os parâmetros apropriados no comando CREATE SEQUENCE. Essa função requer o privilégio USAGE ou UPDATE na sequência. |
setval ( regclass, bigint [, boolean ] ) → bigint |
Define o valor atual do objeto de sequência e, opcionalmente, o respectivo sinalizador is_called. O formulário de dois parâmetros define o campo last_value da sequência com o valor especificado e define o campo is_called como true, o que significa que o próximo nextval avançará a sequência antes de exibir um valor. O valor que será relatado por currval também é definido como o valor especificado. No formulário de três parâmetros, é possível definir is_called como true ou false. true tem o mesmo efeito que o formulário de dois parâmetros. Se estiver definido como false, o próximo nextval exibirá exatamente o valor especificado e o avanço da sequência começará com o nextval subsequente. Além disso, o valor informado por currval não é alterado aqui. Por exemplo: O resultado exibido por setval é simplesmente o valor do segundo argumento. Essa função requer o privilégio UPDATE na sequência. |
currval ( regclass ) → bigint |
Exibe o valor obtido mais recentemente por nextval para essa sequência na sessão atual. (Será relatado um erro se nextval nunca tiver sido chamado para essa sequência nessa sessão.) Como está sendo exibido um valor de sessão local, essa função fornecerá uma resposta previsível independentemente de outras sessões terem executado nextval porque a sessão atual executou. Essa função requer o privilégio USAGE ou SELECT na sequência. |
lastval () → bigint |
Mostra o valor exibido mais recentemente por nextval na transação atual. Essa função é idêntica a currval, exceto que, em vez de usar o nome da sequência como argumento, ela se refere a qualquer sequência à qual nextval foi aplicado mais recentemente na transação atual. É um erro chamar lastval quando nextval ainda não foi chamado na transação atual. Essa função requer o privilégio USAGE ou SELECT na última sequência usada. |
Atenção
O valor obtido por nextval não será recuperado para reutilização se a transação de chamada for cancelada posteriormente. Isso significa que cancelamentos de transações ou falhas no banco de dados podem gerar intervalos na sequência dos valores atribuídos. Isso também pode acontecer sem o cancelamento de uma transação. Por exemplo, um INSERT com uma cláusula ON CONFLICT calculará a tupla a ser inserida e fará qualquer chamada nextval necessária antes de detectar qualquer conflito que faria com que a regra ON CONFLICT fosse seguida. Portanto, os objetos de sequência do Aurora DSQL não podem ser usados para obter sequências “sem intervalos”.
Da mesma forma, as alterações de estado de sequência criadas por setval podem vistas imediatamente por outras transações e não serão desfeitas se a transação de chamada for revertida.
A sequência a ser operada por uma função de sequência é especificada por um argumento regclass, que é simplesmente o identificador de objeto (OID) da sequência no catálogo de sistema pg_class. No entanto, não é necessário pesquisar o OID manualmente, porque o conversor de entrada do tipo de dados regclass fará isso para você. Consulte a documentação Object Identifier Types