PostgreSQL

Вмъкване на PostgreSQL за конфликт

Вмъкване на PostgreSQL за конфликт
Изразът „Upsert“ се разпознава като обединяване в RDBMS. „Upsert“ е полезно да се използва с PostgreSQL, ако не искате да се справяте с уникални грешки при нарушаване на ограничения поради повтарящи се записи. Когато стартирате обща команда за актуализиране, необходимите корекции ще настъпят само ако записът отговаря на командните стандарти; ако няма такива данни, тогава нищо не се случва. Когато добавите нов ред към таблица, PostgreSQL ще актуализира реда, ако е съществувал преди това, или ще включи новия ред, ако редът не съществува. Ключовата дума „Upsert“ на SQL съчетава думите „актуализация“ и „вмъкване“.”Тази статия ви показва как работи функцията PostgreSQL 'Upsert', както и как да използвате функцията 'Upsert' за добавяне или актуализиране на информация, ако вмъкнатият ред вече съществува в таблицата.

Синтаксис

По-долу е синтаксисът на заявката „Upsert“ ON CONFLICT.

>> ВЪВЕЖДАНЕ В Име на таблица (списък с колони) ВАРУСА (списък с стойности) НА КОНФЛИКТ целево действие;

Стартирайте Shell на командния ред на PostgreSQL

За да започнете, стартирайте черупката на командния ред на PostgreSQL от менюто на приложението. Свържете го с необходимия сървър. Въведете името на базата данни, върху която искате да работите. За да работите на друг порт, въведете номера на порта и потребителското име, с което искате да работите. За да продължите с параметрите по подразбиране, оставете интервалите както е и натиснете „Enter“ при всяка опция. Добавете парола за избраното потребителско име и вашата командна обвивка трябва да е готова за използване.

Пример 1:

Сега можем да започнем с „Upsert“ в конфликт. Да предположим, че имате таблица, озаглавена „човек“ в избрана база данни с някои полета, които показват записи на различни лица. Тези записи показват имената на хората, техните възрасти и техните градове и държави. Таблицата е показана по-долу.

>> ИЗБЕРЕТЕ * ОТ човек;

Важно е да знаете как може да възникне грешка или конфликт. Полето на таблицата „id“, което е и първичен ключ, съдържа стойности от 1 до 15. Когато потребителят се опита да вмъкне някои дублиращи се записи в таблицата, възниква конфликт.

Нека опитаме следния оператор INSERT, като вмъкнем записите в таблицата „person“. Тази заявка ще доведе до грешка, тъй като стойността „3“ на полето „id“ вече съществува в таблицата.

>> ВЪВЕДЕТЕ В ЛИЦЕ (идентификатор, име, възраст, град, държава) СТОЙНОСТИ ('3', 'Habib', '45', 'Chakwal', 'Pakistan');

Пример 2: Upsert с клауза ON CONFLICT

Ще използваме клаузата ON CONFLICT, за да избегнем INSERT заявката, която причинява тази грешка поради вмъкване на дублиращите се записи. Командата ON CONFLICT предлага две фрази с различни употреби.

Пример 3: Поставете с клауза НЕ НИЩО

В този пример ще разгледаме клаузата DO NOTHING. Тази клауза уточнява, че при грешка или конфликт няма да се извършва операция. С други думи, тази клауза само ще избегне конфликт или грешка.

И така, нека опитаме същата команда INSERT, която използвахме по-рано за добавяне на дублиращи се записи в таблицата „човек“, с добавени няколко промени. Добавихме клаузата ON CONFLICT, заедно с израза DO NOTHING в тази клауза. Клаузата ON CONFLICT е приложена към уникалната колона „id“. Това означава, че когато потребителят се опита да вмъкне дублираната стойност в колоната „id“, той ще избегне конфликта и няма да направи нищо. Както можете да видите на изображението по-долу, той дори няма да вмъкне новия запис в таблицата, нито ще актуализира предишния запис.

>> ВЪВЕДЕТЕ В лице (идентификатор, име, възраст, град, държава) СТОЙНОСТИ ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ЗА КОНФЛИКТ (id) НЕ НИЩО;

Нека проверим таблицата „човек“ отново за автентичност. Както можете да видите на изображението по-долу, не са направени промени в таблицата.

>> ИЗБЕРЕТЕ * ОТ човек;

Пример 2: Upsert с DO клауза

След това ще разгледаме клаузите ON CONFLICT и DO. Както показва името му, клаузата ___ ще извърши действие при грешка или конфликт, когато дублирана стойност се вмъкне в таблица. Ще използваме същата команда за вмъкване, която използвахме преди, за да вмъкнем дублиращ се запис в таблицата „лице“, с незначителна промяна. Добавихме клаузата ON CONFLICT с клаузата DO вътре в нея. Когато потребителят се опита да вмъкне не уникалната стойност в колоната „id“, той ще извърши действие, за да избегне конфликта. Използвахме клаузата UPDATE след клаузата DO, която показва актуализация на данните в таблицата „човек“. Ключовата дума SET се използва за задаване на стойността на колоната „name“ на новата стойност „Habib“, като се използва ключовата дума EXCLUDED, където „id“ е „3“ в момента. Ако изпълните следната заявка, ще видите, че заявката е изпълнена.

>> ВЪВЕДЕТЕ В лице (идентификатор, име, възраст, град, държава) СТОЙНОСТИ ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ЗА КОНФЛИКТ (id) НАПРАВЕТЕ АКТУАЛИЗИРАНЕ НАСТРОЙКА име = ИЗКЛЮЧЕНО.име;

Записите в таблицата „човек“ трябва да бъдат извлечени, за да се видят промените в горната заявка. Ако изпълните следната заявка в обвивката на командния ред, трябва да видите следващия изход.

>> ИЗБЕРЕТЕ * ОТ човек;

Както можете да видите от изхода по-долу, името на лицето е актуализирано на „Habib“, където „id“ е „3.'

Можете също така да актуализирате записите в повече от една колона, като използвате ключовата дума EXCLUDED в клаузата ON CONFLICT на заявката INSERT, както е показано по-долу.

>> ВЪВЕДЕТЕ В лице (идентификатор, име, възраст, град, държава) СТОЙНОСТИ ('3', 'Habib', '45', 'Chakwal', 'Pakistan') ЗА КОНФЛИКТ (id) НАПРАВЕТЕ АКТУАЛИЗИРАНЕ НАСТРОЙКА име = ИЗКЛЮЧЕНО.име, град = ИЗКЛЮЧЕНО.град;

Промените са показани по-долу.

>> ИЗБЕРЕТЕ * ОТ човек;

Заключение

Тази статия ви показа как да използвате PostgreSQL 'Upsert' с клаузата ON CONFLICT, заедно с действията DO и DO NOTHING. След като прочетохме тази статия, се надяваме, че ще ви е по-лесно да разберете как да използвате PostgreSQL 'Upsert.'

Най-добрите емулатори на игрови конзоли за Linux
Тази статия ще изброи популярния софтуер за емулация на игрова конзола, наличен за Linux. Емулацията е слой за софтуерна съвместимост, който емулира х...
Най-добрите дистрибуции на Linux за игри през 2021 г
Операционната система Linux е изминала дълъг път от първоначалния си, прост, базиран на сървъра външен вид. Тази операционна система се подобри неимов...
Как да заснемете и поточно предадете игралната си сесия на Linux
В миналото играта на игри се смяташе само за хоби, но с течение на времето игралната индустрия отбеляза огромен ръст по отношение на технологиите и бр...