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.
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.'