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

192
Views
¿Puedes evitar una inserción en un disparador posterior en pgsql?

En Postgres, tengo un activador posterior a la inserción en una tabla particionada que verifica si el registro es único o no. Actualmente, si el registro no es único, el activador genera una excepción. Esto no es lo que quiero porque solo quiero ignorar este caso y actuar como si la inserción realmente hubiera ocurrido.

¿Es posible configurar el disparador para que falle silenciosamente? La transacción circundante no debería fallar, pero la fila no debería insertarse.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Tengo un disparador posterior a la inserción en una tabla particionada que verifica si el registro es único o no.

Puede hacer esto como parte de su declaración de insert , usando la cláusula on conflict do nothing . Esto es más simple y más eficiente que usar un gatillo.

Para que esto funcione, necesita una restricción unique en la columna (o la tupla de columnas) cuya singularidad desea aplicar. Asumiendo que esta es la columna id , harías:

 insert into mytable(id, ...) -- enumerate the target columns here values(id, ...) -- enumerate the values to insert here on conflict(id) do nothing

Tenga en cuenta que la acción de conflicto do nothing en realidad no requiere especificar un objetivo de conflicto, por lo que estrictamente hablando, podría escribir esto como on conflict do nothing en su lugar. Considero que siempre es una buena idea especificar el objetivo del conflicto, por lo que el alcance está mejor definido.


Si por algún motivo no puede tener un índice único en la columna de destino, otra opción es usar la sintaxis insert ... select junto con una condición de not exists :

 insert into mytable(id, ...) select id, ... from (values(id, ...)) t(id, ...) where not exists (select 1 from mytable t1 where t1.id = t.id)
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!