Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda