PostgreSQL Upsert en conflicto

PostgreSQL Upsert en conflicto
La expresión de 'Upsert' se reconoce como una fusión en RDBMS. Una 'Upsert' es útil tener con PostgreSQL si no desea lidiar con errores de violación de restricción únicos debido a entradas repetidas. Cuando ejecuta un comando de actualización genérica, los ajustes necesarios solo ocurrirán si un registro se ajusta a los estándares de comando; Si no existen tales datos, entonces no pasa nada. Cuando agrega una nueva fila a una tabla, PostgreSQL actualizará la fila si existía anteriormente, o de lo contrario incorporará la nueva fila si la fila no existía. La palabra clave SQL 'Upsert' combina las palabras "actualización" e "insertar."Este artículo le muestra cómo funciona la función PostgreSQL 'Upsert', así como cómo usar la función 'Upsert' para agregar o actualizar información si la fila insertada ya existe en la tabla.

Sintaxis

La siguiente es la sintaxis del 'upsert' en la consulta de conflictos.

>> Insertar en table_name (column_list) valuse (value_list) en la acción de destino de conflicto;

Iniciar el shell de línea de comandos PostgreSQL

Para comenzar, inicie el shell de línea de comandos PostgreSQL en el menú de la aplicación. Conéctelo al servidor requerido. Ingrese el nombre de la base de datos en el que desea trabajar. Para trabajar en otro puerto, escriba el número de puerto y el nombre de usuario con el que desea trabajar. Para continuar con los parámetros predeterminados, deje los espacios tal como está y presione 'ENTER' en cada opción. Agregue una contraseña para el nombre de usuario seleccionado, y su cáscara de comandos debe estar listo para usar.

Ejemplo 1:

Ahora, podemos comenzar con 'Upsert' en conflicto. Supongamos que tiene una tabla titulada 'Persona' en una base de datos seleccionada con algunos campos que muestran registros de diferentes personas. Estos registros muestran los nombres de las personas, sus edades y sus ciudades y países. La tabla se muestra a continuación.

>> seleccionar * de la persona;

Es importante saber cómo puede surgir un error o conflicto. El campo de tabla 'ID', que también es una clave principal, contiene valores de 1 a 15. Cuando el usuario intenta insertar algunos registros duplicados en la tabla, se produce el conflicto.

Probemos la siguiente declaración de inserción, insertando los registros en la tabla 'persona'. Esta consulta causará un error porque el valor '3' del campo 'ID' ya existe en la tabla.

>> Inserte en persona (id, nombre, edad, ciudad, país) valores ('3', 'Habib', '45', 'Chakwal', 'Pakistán');

Ejemplo 2: Upsert con la cláusula de conflicto

Usaremos la cláusula de conflicto ON para evitar la consulta de inserción que está causando este error debido a la inserción de los registros duplicados. El comando en conflicto se le ocurre dos frases con diferentes usos.

  • HACER: Realizar operaciones para superar el conflicto.
  • HACER NADA: Evite el conflicto sin hacer nada.

Ejemplo 3: Upsert con cláusula Do Nothing

En este ejemplo, veremos la cláusula Do Nothing. Esta cláusula elabora que no se realizará ninguna operación tras error o conflicto. En otras palabras, esta cláusula solo evitará conflicto o error.

Entonces, intentemos el mismo comando insertar que usamos anteriormente para agregar registros duplicados a la tabla 'persona', con algunos cambios adjuntos. Hemos agregado la cláusula de conflicto, junto con la declaración de hacer nada en esta cláusula. La cláusula de conflicto en conflicto se ha aplicado a la columna única 'id'. Esto significa que, cuando el usuario intenta insertar el valor duplicado en la columna 'ID', evitará el conflicto y no hará nada. Como puede ver en la imagen a continuación, ni siquiera insertará el nuevo registro en la tabla, ni actualizará el registro anterior.

>> inserte en la persona (id, nombre, edad, ciudad, país) valores ('3', 'Habib', '45', 'Chakwal', 'Pakistán') en conflicto (id) no hacer nada;

Vamos a ver la tabla de 'persona' nuevamente en aras de la autenticidad. Como puede ver en la imagen a continuación, no se han realizado cambios en la mesa.

>> seleccionar * de la persona;

Ejemplo 2: upsert with do cláusula

A continuación, veremos el conflicto y haremos cláusulas. Como su nombre indica, la cláusula ___ realizará una acción tras error o conflicto cuando se inserta un valor duplicado en una tabla. Usaremos el mismo comando de inserción que utilizamos anteriormente para insertar un registro duplicado en la tabla 'persona', con una alteración menor. Hemos agregado la cláusula de conflicto con la cláusula do dentro de ella. Cuando el usuario intenta insertar el valor no único en la columna 'ID', realizará una acción para evitar el conflicto. Hemos estado utilizando la cláusula de actualización después de la cláusula DO, que indica una actualización de los datos en la tabla 'persona'. La palabra clave SET se usa para establecer el valor de la columna 'Nombre' en el nuevo valor, 'Habib', utilizando la palabra clave excluida donde el 'id' es '3' en el momento actual. Si ejecuta la siguiente consulta, verá que la consulta se ha realizado.

>> Insertar en la persona (id, nombre, edad, ciudad, país) valores ('3', 'Habib', '45', 'Chakwal', 'Pakistán') en conflicto (id) do actualizar el nombre del nombre = excluido.nombre;

Los registros de la tabla de 'persona' deben obtenerse para ver los cambios en la consulta anterior. Si ejecuta la siguiente consulta en el shell de línea de comandos, debería ver la salida posterior.

>> seleccionar * de la persona;

Como puede ver en la salida a continuación, el nombre de la persona se ha actualizado a 'Habib', donde la 'ID' es '3.'

También puede actualizar los registros en más de una columna utilizando la palabra clave excluida en la cláusula de conflicto ON de la consulta de inserción, como se muestra a continuación.

>> Insertar en la persona (id, nombre, edad, ciudad, país) valores ('3', 'Habib', '45', 'Chakwal', 'Pakistán') en conflicto (id) do actualizar el nombre del nombre = excluido.nombre, ciudad = excluido.ciudad;

Los cambios se muestran a continuación.

>> seleccionar * de la persona;

Conclusión

Este artículo le mostró cómo usar PostgreSQL 'Upsert' con la cláusula de conflicto, junto con las acciones de hacer y no hacer nada. Después de leer este artículo, esperamos que les resulte más fácil entender cómo usar PostgreSQL 'Upsert.'