Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

223
Views
¿Debo bloquear una tabla de PostgreSQL al invocar setval para la secuencia con la función de identificación máxima?

Tengo el siguiente script SQL que establece el valor de secuencia correspondiente al valor máximo de la columna ID:

 SELECT SETVAL('mytable_id_seq', COALESCE(MAX(id), 1)) FROM mytable;

¿Debería bloquear 'mytable' en este caso para evitar cambiar la ID en una solicitud paralela, como en el ejemplo a continuación?

 request #1 request #2 MAX(id)=5 inserted id 6 SETVAL=5

¿O setval(max(id)) es una operación atómica?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Su sospecha es correcta, este enfoque está sujeto a las condiciones de carrera.

Pero bloquear la tabla no ayudará, porque no evitará que una transacción concurrente obtenga nuevos valores de secuencia. Esta transacción se bloqueará mientras la mesa esté bloqueada, pero felizmente continuará insertándose una vez que el bloqueo desaparezca, utilizando un valor de secuencia que obtuvo mientras la mesa estaba bloqueada.

Si fuera posible bloquear secuencias, esa podría ser una solución, pero no es posible bloquear secuencias.

Se me ocurren dos soluciones:

  1. Elimine todos los privilegios en la secuencia mientras la modifica, de modo que las solicitudes simultáneas a la secuencia fallen. Eso provoca errores, por supuesto.

  2. La forma pragmática: usar

     SELECT SETVAL('mytable_id_seq', COALESCE(MAX(id), 1) + 100000) FROM mytable;

    Aquí 100000 es un valor que es con seguridad mayor que las filas de números que podrían insertarse mientras se ejecuta la operación.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!