Basta ya de investigar por todo internet ya que llegaste al sitio necesario, poseemos la respuesta que deseas pero sin liarte.
Esta sección describe las funciones para operar en objetos de secuencia, también llamados generadores de secuencia o simplemente secuencias. Los objetos de secuencia son tablas especiales de una sola fila creadas con CREATE SEQUENCE. Los objetos de secuencia se utilizan comúnmente para generar identificadores únicos para las filas de una tabla. Las funciones de secuencia, enumeradas en la tabla 9.50, proporcionan métodos sencillos y seguros para múltiples usuarios para obtener valores de secuencia sucesivos a partir de objetos de secuencia.
Cuadro 9.50. Funciones de secuencia
Función Descripción |
---|
Avanza el objeto de secuencia a su siguiente valor y devuelve ese valor. Esto se hace de forma atómica: incluso si se ejecutan varias sesiones Esta función requiere |
Establece el valor actual del objeto de secuencia y, opcionalmente, su SELECT setval('myseq',42);Next nextval will return43SELECT setval('myseq',42,true); Same as above SELECT setval('myseq',42,false);Next nextval will return42 El resultado devuelto por Esta función requiere |
Devuelve el valor obtenido más recientemente por Esta función requiere |
Devuelve el valor devuelto más recientemente por Esta función requiere |
Precaución
Para evitar bloquear transacciones concurrentes que obtienen números de la misma secuencia, un
nextval
la operación nunca se revierte; es decir, una vez que se ha obtenido un valor, se considera utilizado y no se devolverá de nuevo. Este es true incluso si la transacción circundante se aborta más tarde, o si la consulta que realiza la llamada termina sin usar el valor. Por ejemplo, unINSERT
con unON CONFLICT
la cláusula calculará la tupla que se insertará, incluida la realización de cualquiernextval
llamadas, antes de detectar cualquier conflicto que pudiera causar que siguiera elON CONFLICT
regla en su lugar. Tales casos dejarán sin usar “agujeros“ en la secuencia de valores asignados. Por lo tanto, los objetos de secuencia de PostgreSQL no se puede utilizar para obtener “sin pausas“ secuencias.Del mismo modo, cualquier cambio de estado de secuencia realizado por
setval
no se deshacen si la transacción se revierte.
La secuencia a ser operada por una función de secuencia está especificada por un regclass
argumento, que es simplemente el OID de la secuencia en el pg_class
catálogo del sistema. Sin embargo, no es necesario buscar el OID a mano, ya que regclass
El convertidor de entrada del tipo de datos hará el trabajo por usted. Simplemente escriba el nombre de la secuencia entre comillas simples para que parezca una constante literal. Para compatibilidad con el manejo de nombres SQL ordinarios, el string se convertirá a minúsculas a menos que contenga comillas dobles alrededor del nombre de la secuencia. Por lo tanto:
nextval('foo') operates on sequence foo nextval('FOO') operates on sequence foo nextval('"Foo"') operates on sequence Foo
El nombre de la secuencia se puede calificar de esquema si es necesario:
nextval('myschema.foo') operates on myschema.foo nextval('"myschema".foo') same as above nextval('foo') searches search path for foo
Consulte la Sección 8.19 para obtener más información sobre regclass
.
Nota
Antes de PostgreSQL 8.1, los argumentos de las funciones de secuencia eran de tipo
text
, noregclass
, y la conversión descrita anteriormente de un texto string a un valor de OID sucedería en tiempo de ejecución durante cada llamada. Para compatibilidad con versiones anteriores, esta facilidad todavía existe, pero internamente ahora se maneja como una coerción implícita detext
pararegclass
antes de que se invoque la función.Cuando escribe el argumento de una función de secuencia como un literal sin adornos string, se convierte en una constante de tipo
regclass
. Dado que esto es realmente solo un OID, rastreará la secuencia identificada originalmente a pesar del cambio de nombre posterior, la reasignación de esquema, etc. “encuadernación anticipada“ El comportamiento suele ser deseable para referencias de secuencia en vistas y valores predeterminados de columna. Pero a veces es posible que quieras “encuadernación tardía“ donde la referencia de secuencia se resuelve en tiempo de ejecución. Para obtener un comportamiento de enlace tardío, fuerce la constante para que se almacene como untext
constante en lugar deregclass
:nextval('foo'::text) foo is looked up at runtimeTenga en cuenta que el enlace tardío era el único comportamiento admitido en las versiones de PostgreSQL anteriores a 8.1, por lo que es posible que deba hacer esto para preservar la semántica de las aplicaciones antiguas.
Por supuesto, el argumento de una función de secuencia puede ser tanto una expresión como una constante. Si es una expresión de texto, la coerción implícita dará como resultado una búsqueda en tiempo de ejecución.
Anterior | Hasta | próximo |
9.16. Funciones y operadores JSON | Hogar | 9.18. Expresiones condicionales |
Recuerda que puedes dar visibilidad a este ensayo si lograste el éxito.