PostgreSQL Upsert sur le conflit

PostgreSQL Upsert sur le conflit
L'expression «Upsert» est reconnue comme une fusion dans le SBRM. Un `` upsert '' est utile à avoir avec PostgreSQL si vous ne voulez pas faire face aux erreurs de violation de restriction uniques en raison des entrées répétées. Lorsque vous exécutez une commande de mise à jour générique, les ajustements nécessaires ne se produiront que si un enregistrement correspond aux normes de commande; Si aucune de telles données n'existe, alors rien ne se passe. Lorsque vous ajoutez une nouvelle ligne à une table, PostgreSQL mettra à jour la ligne si elle existait précédemment, sinon elle incorporera la nouvelle ligne si la ligne n'existait pas. Le mot clé SQL 'Upsert' combine les mots «mise à jour» et «insérer."Cet article vous montre comment fonctionne la fonctionnalité` `upsert '' postgresql, ainsi que comment utiliser la fonctionnalité` `upsert '' pour ajouter ou mettre à jour des informations si la ligne insérée existe déjà dans le tableau.

Syntaxe

Ce qui suit est la syntaxe de «Upsert» sur la requête de conflit.

>> INSERT INTO TABLE_NAME (Column_List) Valuse (Value_List) sur l'action cible de conflit;

Lancez le shell de ligne de commande PostgreSQL

Pour commencer, lancez le shell de ligne de commande PostgreSQL à partir du menu de l'application. Connectez-le au serveur requis. Entrez le nom de la base de données sur laquelle vous souhaitez travailler. Pour travailler sur un autre port, saisissez le numéro de port et le nom d'utilisateur avec lequel vous souhaitez travailler. Pour continuer avec les paramètres par défaut, laissez les espaces tels quels et appuyez sur «Entrer» à chaque option. Ajoutez un mot de passe pour le nom d'utilisateur sélectionné et votre coque de commande doit être prête à l'emploi.

Exemple 1:

Maintenant, nous pouvons commencer avec «Upsert» dans le conflit. Supposons que vous ayez un tableau intitulé «Personne» dans une base de données sélectionnée avec certains champs qui montrent des enregistrements de différentes personnes. Ces dossiers montrent les noms du peuple, de leur âge et de leurs villes et pays. Le tableau s'affiche ci-dessous.

>> sélectionner * parmi la personne;

Il est important de savoir comment une erreur ou un conflit peut survenir. Le champ de table 'ID', qui est également une clé principale, contient des valeurs de 1 à 15. Lorsque l'utilisateur essaie d'insérer des enregistrements en double dans le tableau, le conflit se produit.

Essayons la déclaration d'insertion suivante, en insérant les enregistrements dans le tableau «personne». Cette requête entraînera une erreur car la valeur «3» du champ «ID» existe déjà dans le tableau.

>> insérer dans la personne (id, nom, âge, ville, pays) valeurs ('3', 'Habib', '45', 'Chakwal', 'Pakistan');

Exemple 2: Upsert avec la clause de conflit

Nous utiliserons la clause ON Conflict pour éviter la requête d'insertion qui provoque cette erreur en raison de l'insertion des enregistrements en double. Le commandement des conflits propose deux phrases avec des usages différents.

  • FAIRE: Effectuer des opérations pour surmonter le conflit.
  • NE FAIS RIEN: Évitez le conflit sans rien faire.

Exemple 3: Upsert with Do Nothing Clause

Dans cet exemple, nous examinerons la clause Do Nothing. Cette clause élabore qu'aucune opération ne sera effectuée lors d'une erreur ou d'un conflit. En d'autres termes, cette clause ne fera qu'éviter les conflits ou l'erreur.

Alors, essayons la même commande insert que nous avons utilisée plus tôt pour ajouter des enregistrements en double au tableau «personne», avec quelques modifications annexées. Nous avons ajouté la clause de conflit sur les conflits, ainsi que la déclaration Do Nothing dans cette clause. La clause On Conflict a été appliquée à la colonne «ID» unique. Cela signifie que, lorsque l'utilisateur tente d'insérer la valeur en double à la colonne 'ID', cela évitera le conflit et ne fera rien. Comme vous pouvez le voir dans l'image ci-dessous, il n'insertera même pas le nouvel enregistrement dans le tableau, ni ne mettra à jour l'enregistrement précédent.

>> Insérer dans la personne (id, nom, âge, ville, pays) valeurs («3», «habib», «45», «chakwal», «pakistan») sur le conflit (id) ne font rien;

Vérifions à nouveau la table «personne» pour des raisons d'authenticité. Comme vous pouvez le voir dans l'image ci-dessous, aucune modification n'a été apportée à la table.

>> sélectionner * parmi la personne;

Exemple 2: Upsert with Do Clause

Ensuite, nous examinerons le conflit et faire des clauses. Comme son nom l'indique, la clause ___ effectuera une action lors d'une erreur ou d'un conflit lorsqu'une valeur en double est insérée dans un tableau. Nous utiliserons la même commande INSERT que nous avons utilisée précédemment pour insérer un enregistrement en double dans le tableau «Personne», avec une modification mineure. Nous avons ajouté la clause de conflit sur la clause Do à l'intérieur. Lorsque l'utilisateur tente d'insérer la valeur non unique de la colonne «ID», il effectuera une action pour éviter le conflit. Nous avons utilisé la clause de mise à jour après la clause DO, qui indique une mise à jour des données du tableau «Personne». Le mot clé SET est utilisé pour définir la valeur de la colonne «Nom» sur la nouvelle valeur, «Habib». Si vous exécutez la requête suivante, vous verrez que la requête a été exécutée.

>> Insérer dans la personne (id, nom, âge, ville, pays) valeurs («3», «habib», «45», «chakwal», «pakistan») sur le conflit (id) mettent à jour le nom du jeu = exclu.nom;

Les enregistrements du tableau «personne» doivent être récupérés pour voir les modifications de la requête ci-dessus. Si vous exécutez la requête suivante dans le shell de ligne de commande, vous devriez voir la sortie suivante.

>> sélectionner * parmi la personne;

Comme vous pouvez le voir dans la sortie ci-dessous, le nom de la personne a été mis à jour vers «Habib», où «l'ID» est »3.'

Vous pouvez également mettre à jour les enregistrements dans plus d'une colonne en utilisant le mot-clé exclu dans la clause de conflit de la requête d'insertion, comme indiqué ci-dessous.

>> Insérer dans la personne (id, nom, âge, ville, pays) valeurs («3», «habib», «45», «chakwal», «pakistan») sur le conflit (id) mettent à jour le nom du jeu = exclu.nom, ville = exclu.ville;

Les modifications sont indiquées ci-dessous.

>> sélectionner * parmi la personne;

Conclusion

Cet article vous a montré comment utiliser PostgreSQL `` Upsert '' avec la clause de conflit, ainsi que les actions Do and Do rien. Après avoir lu cet article, nous espérons que vous trouverez plus facile de comprendre comment utiliser PostgreSQL 'UPSERT.'