tabla secuencias secuencia postgres modificar ejemplos currval create consultar asociar postgresql postgresql-8.4

postgresql - ejemplos - modificar secuencias postgres



Opciones para recuperar el valor de secuencia actual(en el momento de la consulta) (2)

Puedes utilizar:

SELECT last_value FROM sequence_name;

Actualización : esto está documentado en la declaración CREATE SEQUENCE :

Aunque no puede actualizar una secuencia directamente, puede usar una consulta como:

SELECCIONAR * DESDE nombre;

para examinar los parámetros y el estado actual de una secuencia. En particular, el campo last_value de la secuencia muestra el último valor asignado por cualquier sesión. (Por supuesto, este valor puede estar obsoleto para cuando se imprima, si otras sesiones están haciendo llamadas de próximaval activamente).

¿Cómo es posible obtener el valor de la secuencia actual en postgresql 8.4?

Nota: Necesito el valor para algún tipo de estadística, solo recuperar y almacenar. Nada relacionado con la concurrencia y las condiciones de carrera en caso de incrementarlo manualmente no es relevante para la pregunta.

Nota 2: la secuencia se comparte en varias tablas

Nota 3: currval no funcionará debido a:

  • Devuelve el valor obtenido más recientemente por nextval para esta secuencia en la sesión actual
  • ERROR: currval of sequence "<sequence name>" is not yet defined in this session

Mi idea actual: es analizar DDL, lo cual es extraño


Si la secuencia se usa para identificadores únicos en una tabla, simplemente puede hacer esto:

select max(id) from mytable;

La forma más eficiente, aunque postgres específica, es:

select currval(''mysequence'');

aunque técnicamente esto devuelve el último valor generado por la llamada a nextval(''mysequence'') , que no necesariamente debe ser utilizado por la persona que llama (y si no se usa deja huecos en una columna de auto increments id).