Funciones de manipulación de secuencias - Amazon Aurora DSQL

Funciones de manipulación de secuencias

En esta sección se describen las funciones para operar con objetos de secuencia, también denominados generadores de secuencias o simplemente secuencias. Los objetos de secuencia son tablas especiales de una sola fila creadas con CREATE SEQUENCE. Los objetos de secuencia se utilizan habitualmente para generar identificadores únicos para las filas de una tabla. Las funciones de secuencia proporcionan métodos sencillos y seguros para varios usuarios que permiten obtener valores de secuencia sucesivos a partir de objetos de secuencia.

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.

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.

Función Descripción
nextval ( regclass ) → bigint Hace avanzar el objeto secuencial a su siguiente valor y devuelve ese valor. Esto se hace de forma atómica: incluso si se ejecutan varias sesiones nextval simultáneamente, cada una recibirá de forma segura un valor de secuencia distinto. Si el objeto de secuencia se ha creado con los parámetros predeterminados, las llamadas de nextval sucesivas devolverán valores crecientes que comiencen por 1. Se pueden obtener otros comportamientos utilizando los parámetros adecuados en el comando CREATE SEQUENCE. Esta función requiere un privilegio USAGE o UPDATE en la secuencia.
setval ( regclass, bigint [, boolean ] ) → bigint Establece el valor actual del objeto de secuencia y, opcionalmente, su indicador is_called. La forma de dos parámetros establece el campo last_value de la secuencia en el valor especificado y establece su campo is_called en true, lo que significa que el siguiente nextval hará avanzar la secuencia antes de devolver un valor. El valor que indicará currval también se establece en el valor especificado. En el formulario de tres parámetros, is_called se puede establecer en true o false. true tiene el mismo efecto que el formulario de dos parámetros. Si se establece en false, el nextval siguiente devolverá exactamente el valor especificado y el avance de la secuencia comenzará con el nextval siguiente. Además, el valor indicado por currval no cambia aquí. Por ejemplo:
SELECT setval('myseq', 42); -- Next nextval will return 43 SELECT setval('myseq', 42, true); -- Same as above SELECT setval('myseq', 42, false); -- Next nextval will return 42
El resultado devuelto por setval es solo el valor de su segundo argumento. Esta función requiere el privilegio UPDATE en la secuencia.
currval ( regclass ) → bigint Devuelve el valor obtenido más recientemente por nextval para esta secuencia en la sesión actual. (Se informa de un error si nextval nunca se ha llamado para esta secuencia en esta sesión). Dado que esto devuelve un valor local de la sesión, ofrece una respuesta predecible sobre si otras sesiones han ejecutado nextval o no, ya que la sesión actual lo ha hecho. Esta función requiere un privilegio USAGE o SELECT en la secuencia.
lastval () → bigint Devuelve el valor devuelto más recientemente por nextval en la transacción actual. Esta función es idéntica a currval, excepto que, en lugar de tomar el nombre de la secuencia como argumento, se refiere a la secuencia a la que nextval se haya aplicado más recientemente en la transacción actual. Es un error llamar a lastval si aún no se ha llamado a nextval en la transacción actual. Esta función requiere un privilegio USAGE o SELECT en la última secuencia utilizada.
aviso

El valor obtenido por nextval no se recupera para su reutilización si la transacción de llamada se cancela posteriormente. Esto significa que las interrupciones de transacciones o los fallos de la base de datos pueden provocar brechas en la secuencia de valores asignados. Eso también puede ocurrir sin que se cancele la transacción. Por ejemplo, un INSERT con una cláusula ON CONFLICT calculará la tupla que se va a insertar, incluida la realización de las llamadas de nextval necesarias, antes de detectar cualquier conflicto que pueda provocar que siga la regla ON CONFLICT. Por lo tanto, los objetos de secuencia de Aurora DSQL no se pueden utilizar para obtener secuencias “sin brechas”.

Del mismo modo, los cambios de estado de secuencia realizados por setval son inmediatamente visibles para otras transacciones y no se deshacen si la transacción que realiza la llamada se revierte.

La secuencia sobre la que va a operar una función de secuencia se especifica mediante un argumento regclass, que es simplemente el OID de la secuencia en el catálogo del sistema pg_class. Sin embargo, no tiene que buscar el OID manualmente, ya que el convertidor de entrada del tipo de datos regclass hará el trabajo por usted. Consulte la documentación de PostgreSQL sobre los tipos de identificadores de objetos para obtener más información.