PostgreSQL

PostgreSQL Upsert sobre conflictos

PostgreSQL Upsert sobre conflictos
La expresión 'Upsert' se reconoce como una combinación en RDBMS. Es útil tener un 'Upsert' con PostgreSQL si no desea lidiar con errores de violación de restricción únicos debido a entradas repetidas. Cuando ejecuta un comando UPDATE genérico, los ajustes necesarios solo ocurrirán si un registro se ajusta a los estándares del 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 "actualizar" e "insertar.”Este artículo le muestra cómo funciona la función 'Upsert' de PostgreSQL, así como cómo utilizar 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 de la consulta 'Upsert' ON CONFLICT.

>> INSERT INTO table_name (column_list) VALUSE (value_list) ON CONFLICT acción de destino;

Inicie el shell de línea de comandos de PostgreSQL

Para comenzar, inicie el shell de línea de comandos de PostgreSQL desde el menú Aplicación. Conéctelo al servidor requerido. Ingrese el nombre de la base de datos con la 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 como están y presione 'Enter' en cada opción. Agregue una contraseña para el nombre de usuario seleccionado, y su shell de comandos debería estar listo para usar.

Ejemplo 1:

Ahora, podemos empezar con 'Upsert' en conflicto. Suponga 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 la tabla 'id', que también es una clave principal, contiene valores del 1 al 15. Cuando el usuario intenta insertar algunos registros duplicados en la tabla, se produce el conflicto.

Probemos con la siguiente instrucción INSERT, insertando los registros en la tabla 'persona'. Esta consulta provocará un error porque el valor '3' del campo 'id' ya existe en la tabla.

>> INSERT INTO person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan');

Ejemplo 2: Upsert con cláusula ON CONFLICT

Usaremos la cláusula ON CONFLICT para evitar la consulta INSERT que está causando este error al insertar los registros duplicados. El comando ON CONFLICT presenta dos frases con diferentes usos.

Ejemplo 3: Upsert con la cláusula DO NOTHING

En este ejemplo, veremos la cláusula HACER NADA. Esta cláusula explica que no se realizará ninguna operación en caso de error o conflicto. En otras palabras, esta cláusula solo evitará conflictos o errores.

Entonces, intentemos el mismo comando INSERT que usamos anteriormente para agregar registros duplicados a la tabla 'persona', con algunos cambios agregados. Hemos agregado la cláusula ON CONFLICT, junto con la declaración DO NOTHING en esta cláusula. La cláusula ON CONFLICT se ha aplicado a la columna 'id' única. 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.

>> INSERTAR EN la persona (id, nombre, edad, ciudad, país) VALORES ('3', 'Habib', '45', 'Chakwal', 'Pakistán') SOBRE EL CONFLICTO (id) NO HACER NADA;

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

>> SELECCIONAR * DE la persona;

Ejemplo 2: Upsert con cláusula DO

A continuación, veremos las cláusulas ON CONFLICT y DO. Como su nombre lo indica, la cláusula ___ realizará una acción en caso de error o conflicto cuando se inserte un valor duplicado en una tabla. Usaremos el mismo comando de inserción que usamos anteriormente para insertar un registro duplicado en la tabla 'persona', con una alteración menor. Hemos agregado la cláusula ON CONFLICT 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 usando la cláusula UPDATE 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', usando la palabra clave EXCLUDED donde el 'id' es '3' en el momento actual. Si ejecuta la siguiente consulta, verá que la consulta se ha realizado.

>> INSERT INTO person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) ACTUALIZAR SET name = EXCLUDED.nombre;

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

>> SELECCIONAR * DE la persona;

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

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

>> INSERT INTO person (id, name, age, city, country) VALUES ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ON CONFLICT (id) ACTUALIZAR SET name = EXCLUDED.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 ON CONFLICT, junto con las acciones DO y DO NOTHING. Después de leer este artículo, esperamos que le resulte más fácil comprender cómo usar PostgreSQL 'Upsert.'

Los 5 mejores productos ergonómicos de mouse de computadora para Linux
¿El uso prolongado de la computadora causa dolor en la muñeca o los dedos?? ¿Sufre de rigidez en las articulaciones y constantemente tiene que dar la ...
Cómo cambiar la configuración del mouse y el panel táctil con Xinput en Linux
La mayoría de las distribuciones de Linux se envían con la biblioteca "libinput" de forma predeterminada para manejar eventos de entrada en un sistema...
Vuelva a asignar los botones del mouse de manera diferente para diferentes programas con X-Mouse Button Control
Tal vez necesite una herramienta que pueda hacer que el control de su mouse cambie con cada aplicación que use. Si este es el caso, puede probar una a...