Postgresql upsert on Conflict

Postgresql upsert on Conflict
Wyrażenie „upsert” jest rozpoznawane jako scalanie w RDBMS. „Upsert” jest pomocne w PostgreSQL, jeśli nie chcesz zajmować się unikalnymi błędami naruszenia ograniczeń z powodu powtarzanych wpisów. Po uruchomieniu ogólnego polecenia aktualizacji niezbędne korekty wystąpią tylko wtedy, gdy rekord pasuje do standardów poleceń; Jeśli nie ma takich danych, to nic się nie dzieje. Po dodaniu nowego wiersza do tabeli PostgreSQL zaktualizuje wiersz, jeśli istniał wcześniej, w przeciwnym razie zawiera nowy wiersz, jeśli wiersz nie istniał. Słowo kluczowe „Upsert” łączy słowa „aktualizacja” i „wstaw wstaw.„Ten artykuł pokazuje, jak działa funkcja PostgreSQL„ Upsert ”, a także jak korzystać z funkcji„ Upsert ”do dodania lub aktualizacji informacji, jeśli włożony wiersz już istnieje w tabeli.

Składnia

Poniżej znajduje się składnia „upsert” na zapytanie o konflikt.

>> Wstaw do Table_name (kolumn_list) Valuse (wartość_list) w sprawie docelowej konfliktu;

Uruchom powłokę linii poleceń Postgresql

Aby rozpocząć, uruchom powłokę wiersza polecenia PostgreSQL z menu aplikacji. Podłącz go do wymaganego serwera. Wprowadź nazwę bazy danych, nad którą chcesz pracować. Aby pracować na innym porcie, wpisz numer portu i nazwę użytkownika, z którą chcesz pracować. Aby kontynuować z domyślnymi parametrami, pozostaw przestrzenie w taki sposób i naciśnij „Enter” przy każdej opcji. Dodaj hasło do wybranej nazwy użytkownika, a Twoja skorupa powinna być gotowa do użycia.

Przykład 1:

Teraz możemy zacząć od „upsert” w konflikcie. Załóżmy, że masz tabelę zatytułowaną „Osoba” w wybranej bazie danych z niektórymi dziedzinami, które pokazują rekordy różnych osób. Te zapisy pokazują nazwiska ludzi, ich wieków oraz ich miast i krajów. Tabela jest wyświetlana poniżej.

>> Wybierz * od osoby;

Ważne jest, aby wiedzieć, w jaki sposób może pojawić się błąd lub konflikt. Pole tabeli „ID”, które jest również kluczem podstawowym, zawiera wartości od 1 do 15. Kiedy użytkownik próbuje wstawić niektóre zduplikowane rekordy do tabeli, występuje konflikt.

Wypróbujmy następujące oświadczenie wstawu, wkładając rekordy do tabeli „Osoba”. To zapytanie spowoduje błąd, ponieważ wartość „3” pola „id” już istnieje w tabeli.

>> Wstaw do osoby (Id, Name, Age, City, Country) Wartości („3”, „habib”, „45”, „chakwal”, „Pakistan”);

Przykład 2: Upsert z klauzulą ​​o konflikcie

Użyjemy klauzuli ON Conflict, aby uniknąć zapytania, które powoduje ten błąd z powodu wkładania duplikatów rekordów. Dowództwo On On Conflict wymyśla dwa wyrażenia o różnych zastosowaniach.

  • DO: Wykonaj operacje w celu przezwyciężenia konfliktu.
  • NIC NIE ROBIĆ: Unikaj konfliktu bez robienia niczego.

Przykład 3: Upsert z klauzulą ​​rób nic

W tym przykładzie spojrzymy na klauzulę zrób nic. Ta klauzula wyjaśnia, że ​​żadna operacja nie będzie wykonywana po błędach lub konflikcie. Innymi słowy, ta klauzula będzie unikać tylko konfliktu lub błędów.

Wypróbujmy więc to samo polecenie Wstaw, którego użyliśmy wcześniej, aby dodać zduplikowane rekordy do tabeli „Osoba”, z uwzględnieniem kilku zmian. Dodaliśmy klauzulę ON Conflict wraz z stwierdzeniem zrób nic w tej klauzuli. Klauzula ON Conflict została zastosowana do unikalnej kolumny „id”. Oznacza to, że gdy użytkownik próbuje wstawić duplikat wartości do kolumny „id”, uniknie konfliktu i nic nie zrobi. Jak widać na poniższym obrazku, nawet nie włoży nowego rekordu do tabeli, ani nie zaktualizuje poprzedniego rekordu.

>> Włóż do osoby (id, imienia, wiek, miasto, kraj) wartości („3”, „habib”, „45”, „chakwal”, „Pakistan”) na konflikt (id) nic nie rób;

Sprawdźmy ponownie tabelę „osoby” ze względu na autentyczność. Jak widać na poniższym obrazku, w tabeli nie wprowadzono żadnych zmian.

>> Wybierz * od osoby;

Przykład 2: Upsert z klauzulą ​​Do

Następnie spojrzymy na konflikt i klauzule. Jak wskazuje jego nazwa, klauzula ___ wykona akcję po błędach lub konflikcie, gdy duplikat wartości zostanie włożona do tabeli. Użyjemy tego samego polecenia Insert, którego używaliśmy wcześniej do wstawienia zduplikowanego rekordu w tabeli „Osoba”, z niewielką zmianą. Dodaliśmy klauzulę konfliktu z klauzulą ​​do niej. Gdy użytkownik próbuje wstawić wartość nierównomierną do kolumny „id”, wykona akcję, aby uniknąć konfliktu. Używamy klauzuli aktualizacji po klauzuli DO, która wskazuje aktualizację danych w tabeli „Osoba”. Słowo kluczowe jest używane do ustawienia wartości kolumny „Nazwa” na nową wartość, „habib”, używając słowa kluczowego wykluczonego, gdzie „id” to „3” w bieżącym czasie. Jeśli wykonasz następujące zapytanie, zobaczysz, że zapytanie zostało wykonane.

>> Wstaw do osoby (id, nazwa, wiek, miasto, kraj) wartości („3”, „habib”, „45”, „chakwal”, „Pakistan”) na konflikcie (id) Zestaw Nazwa = wykluczone.nazwa;

Zapisy tabeli „osoby” należy pobrać, aby zobaczyć zmiany w powyższym zapytaniu. Jeśli wykonasz następujące zapytanie w powładzie wiersza polecenia, powinieneś zobaczyć kolejne wyjście.

>> Wybierz * od osoby;

Jak widać z poniższego wyjścia, nazwa osoby została zaktualizowana do „habib”, gdzie „id” to „3.'

Możesz także zaktualizować rekordy w więcej niż jednej kolumnie za pomocą wykluczonego słowa kluczowego w klauzuli ON Conflict Query, jak pokazano poniżej.

>> Wstaw do osoby (id, nazwa, wiek, miasto, kraj) wartości („3”, „habib”, „45”, „chakwal”, „Pakistan”) na konflikcie (id) Zestaw Nazwa = wykluczone.Nazwa, miasto = wykluczone.miasto;

Zmiany pokazano poniżej.

>> Wybierz * od osoby;

Wniosek

W tym artykule pokazano, jak używać PostgreSQL „Upsert” z klauzulą ​​ON Conflict, wraz z DO i nie rób żadnych działań. Po przeczytaniu tego artykułu mamy nadzieję, że łatwiej będzie ci zrozumieć, jak korzystać z PostgreSQL „Upsert.'