PostgreSQL

Обновление PostgreSQL при конфликте

Обновление PostgreSQL при конфликте
Выражение Upsert распознается как слияние в СУБД. "Upsert" полезно иметь с PostgreSQL, если вы не хотите иметь дело с уникальными ошибками нарушения ограничений из-за повторяющихся записей. Когда вы запускаете общую команду UPDATE, необходимые настройки будут происходить только в том случае, если запись соответствует стандартам команды; если таких данных нет, то ничего не происходит. Когда вы добавляете новую строку в таблицу, PostgreSQL обновляет строку, если она существовала ранее, или же добавит новую строку, если строка не существует. Ключевое слово «Upsert» SQL объединяет слова «обновить» и «вставить».В этой статье показано, как работает функция PostgreSQL «Upsert», а также как использовать функцию «Upsert» для добавления или обновления информации, если вставленная строка уже существует в таблице.

Синтаксис

Ниже приводится синтаксис запроса «Upsert» ON CONFLICT.

>> INSERT INTO имя_таблицы (список_столбцов) VALUSE (список_значений) ON CONFLICT целевое действие;

Запустить оболочку командной строки PostgreSQL

Для начала запустите оболочку командной строки PostgreSQL из меню приложения. Подключите его к нужному серверу. Введите имя базы данных, над которой вы хотите работать. Чтобы работать с другим портом, введите номер порта и имя пользователя, с которым вы хотите работать. Чтобы продолжить с параметрами по умолчанию, оставьте пробелы как есть и нажимайте «Enter» для каждого варианта. Добавьте пароль для выбранного имени пользователя, и ваша командная оболочка должна быть готова к использованию.

Пример 1:

Теперь мы можем начать с «Upsert» в конфликте. Предположим, у вас есть таблица с названием «человек» в выбранной базе данных с некоторыми полями, которые показывают записи разных лиц. В этих записях указаны имена людей, их возраст, а также их города и страны. Таблица представлена ​​ниже.

>> ВЫБРАТЬ * ОТ человека;

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

Давайте попробуем следующий оператор INSERT, вставив записи в таблицу 'person'. Этот запрос вызовет ошибку, потому что значение '3' поля 'id' уже существует в таблице.

>> ВСТАВИТЬ человека (идентификатор, имя, возраст, город, страна) ЗНАЧЕНИЯ ('3', 'Хабиб', '45', 'Чаквал', 'Пакистан');

Пример 2: Обновление с предложением ON CONFLICT

Мы будем использовать предложение ON CONFLICT, чтобы избежать запроса INSERT, который вызывает эту ошибку из-за вставки повторяющихся записей. Команда ON CONFLICT содержит две фразы с разным употреблением.

Пример 3: Upsert с предложением DO NOTHING

В этом примере мы рассмотрим предложение DO NOTHING. В этом пункте уточняется, что в случае ошибки или конфликта никакие операции выполняться не будут. Другими словами, этот пункт позволит избежать конфликта или ошибки.

Итак, давайте попробуем ту же команду INSERT, которую мы использовали ранее для добавления повторяющихся записей в таблицу 'person', с добавлением нескольких изменений. Мы добавили предложение ON CONFLICT вместе с оператором DO NOTHING в это предложение. Предложение ON CONFLICT было применено к уникальному столбцу id. Это означает, что когда пользователь пытается вставить повторяющееся значение в столбец id, он избегает конфликта и ничего не делает. Как вы можете видеть на изображении ниже, он даже не будет вставлять новую запись в таблицу и не обновляет предыдущую запись.

>> ВСТАВИТЬ В человека (идентификатор, имя, возраст, город, страна) ЗНАЧЕНИЯ ('3', 'Хабиб', '45', 'Чаквал', 'Пакистан') ПРИ КОНФЛИКТЕ (id) НИЧЕГО НЕ ДЕЛАЙТЕ;

Давайте еще раз проверим таблицу 'person' для достоверности. Как вы можете видеть на изображении ниже, в таблицу не было внесено никаких изменений.

>> ВЫБРАТЬ * ОТ человека;

Пример 2: Upsert с предложением DO

Далее мы рассмотрим предложения ON CONFLICT и DO. Как видно из названия, предложение ___ будет выполнять действие в случае ошибки или конфликта, когда повторяющееся значение вставляется в таблицу. Мы будем использовать ту же команду вставки, которую мы использовали ранее, чтобы вставить повторяющуюся запись в таблицу 'person', с небольшими изменениями. Мы добавили предложение ON CONFLICT с предложением DO внутри него. Когда пользователь пытается вставить неуникальное значение в столбец id, он выполнит действие, чтобы избежать конфликта. Мы использовали предложение UPDATE после предложения DO, которое указывает на обновление данных в таблице 'person'. Ключевое слово SET используется для установки значения столбца name на новое значение, Habib, с помощью ключевого слова EXCLUDED, где id - 3 в текущий момент. Если вы выполните следующий запрос, вы увидите, что запрос был выполнен.

>> ВСТАВИТЬ В человека (идентификатор, имя, возраст, город, страна) ЗНАЧЕНИЯ ('3', 'Хабиб', '45', 'Чаквал', 'Пакистан') ПРИ КОНФЛИКТЕ (id) ОБНОВИТЬ НАБОР имя = ИСКЛЮЧЕНО.название;

Чтобы увидеть изменения в указанном выше запросе, необходимо получить записи из таблицы 'person'. Если вы выполните следующий запрос в оболочке командной строки, вы должны увидеть следующий вывод.

>> ВЫБРАТЬ * ОТ человека;

Как видно из вывода ниже, имя человека было обновлено до «Habib», где «id» - «3».'

Вы также можете обновить записи в нескольких столбцах, используя ключевое слово EXCLUDED в предложении ON CONFLICT запроса INSERT, как показано ниже.

>> ВСТАВИТЬ В человека (идентификатор, имя, возраст, город, страна) ЗНАЧЕНИЯ ('3', 'Хабиб', '45', 'Чаквал', 'Пакистан') ПРИ КОНФЛИКТЕ (id) ОБНОВИТЬ НАБОР имя = ИСКЛЮЧЕНО.имя, город = ИСКЛЮЧЕНО.город;

Изменения показаны ниже.

>> ВЫБРАТЬ * ОТ человека;

Заключение

В этой статье показано, как использовать PostgreSQL 'Upsert' с предложением ON CONFLICT, а также действиями DO и DO NOTHING. Мы надеемся, что после прочтения этой статьи вам будет легче понять, как использовать PostgreSQL 'Upsert.'

Установите последнюю версию эмулятора Dolphin для Gamecube и Wii в Linux
Эмулятор Dolphin позволяет вам играть в выбранные вами игры Gamecube и Wii на персональных компьютерах (ПК) Linux. Являясь свободно доступным игровым...
Как использовать чит-движок GameConqueror в Linux
В статье содержится руководство по использованию чит-движка GameConqueror в Linux. Многие пользователи, играющие в игры на Windows, часто используют п...
Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...