es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Insertar en la tabla de PostgreSQL si no existe una combinación única de columnas, y si existe, actualizar el registro existente.

Tengo una tabla estructurada con las columnas userid, itemid, test.

Me gustaría hacer una consulta INSERT/UPDATE para que si la combinación de userid y itemid pasada ya se encuentra en una fila de la tabla, simplemente actualice la prueba de esa fila. He intentado la siguiente consulta pero no funciona:

sql
INSERT INTO tableName (user_id, item_id, test)
VALUES($1, $2, $3)
ON CONFLICT ON CONSTRAINT UNIQUE(user_id, item_id)
DO UPDATE SET test = ($3)

Esto no funciona. También he intentado jugar con la palabra clave DISTINCT pero no he logrado que funcione correctamente. ¡Cualquier ayuda sería muy apreciada!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en SQL y PostgreSQL, recomiendo utilizar la siguiente sintaxis para una consulta de INSERT/UPDATE con una operación de upsert:

    INSERT INTO tableName (user_id, item_id, test) 
    VALUES ($1, $2, $3) 
    ON CONFLICT (user_id, item_id) DO UPDATE 
    SET test = excluded.test;
    

    Esta consulta utiliza la cláusula ON CONFLICT para especificar la restricción a comprobar en caso de conflictos y la variable excluded para referirse a la nueva fila que se está insertando. En este caso, estamos actualizando la columna test de la fila existente con los mismos valores de user_id e item_id de la nueva fila.

    Asegúrese de que la restricción UNIQUE en (user_id, item_id) esté correctamente especificada en la estructura de la tabla. Además, verifique que los valores de las variables $1, $2 y $3 se pasen correctamente a la consulta.

Comments are closed.