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

415
Vistas
¿Cómo usar IF ELSE con la cláusula ON CONFLICT en postgresql?

Tengo un trabajo de flujo de aire que altera las columnas de mi tabla diariamente a través de la declaración INSERT ON CONFLICT. La tabla contiene un campo updated_mode de tipo enumeración que se establece en automático cuando la fila se inserta/actualiza por trabajo o manual si se hace manualmente. Ahora, quiero que mi trabajo actualice las filas solo si updated_mode está configurado en automático . ¿Cómo puedo hacer eso?

Básicamente, quiero hacer algo como:

 Insert into table (data) values (data) on conflict (fields) if updated_mode=automatic set data=excluded.data else do nothing
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Necesita la cláusula WHERE en ON CONFLICT .

 INSERT INTO table_data VALUES (data) ON CONFLICT (fields) DO UPDATE SET data=excluded.data WHERE EXCLUDED.updated_mode='automatic'

Eche un vistazo a db fiddle: https://www.db-fiddle.com/f/qwRzRSFaJx4KDMYn2GEXTe/1

over 4 years ago · Santiago Trujillo Denunciar

0

Debe utilizar la condición WHERE regular. El REGISTRO EXCLUIDO mágico contendrá un registro conflictivo existente. Algo como eso :

 Insert into table (data) values (data) on conflict (fields) do update set data=excluded.data WHERE updated_mode=automatic and fields = EXCLUDEED.fields

Supongo que los campos son el campo en conflicto y el nombre de la tabla es data

over 4 years ago · Santiago Trujillo Denunciar

0

https://www.postgresql.org/docs/release/14.0/

  • Permitir que los nombres de las columnas en la cláusula WHERE de ON CONFLICT se califiquen como tablas (Tom Lane)

Ahora puede hacer referencia más fácilmente a los nombres de las columnas excluidas y a las columnas de la tabla original.
montar la mesa.

 create table test101(id bigint primary key, field1 text, update_mode boolean); insert into test101 values (1,'a', TRUE); insert into test101 values (2 ,'b', false);

excluidos se refieren a la parte que desea insertar.

 --this one will insert. insert into test101(id, field1,update_mode) values(1,'asdf', TRUE) on conflict (id) do update set field1 = excluded.field1 WHERE excluded.update_mode= test101.update_mode;

 --this will not insert insert into test101(id, field1,update_mode) values(2,'asdf', TRUE) on conflict (id) do update set field1 = excluded.field1 WHERE excluded.update_mode= test101.update_mode;
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