Учебное пособие Санкт-Петербург «бхв-петербург»


ON CONFLICT ON CONSTRAINT aircrafts_tmp_pkey



Pdf көрінісі
бет170/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   166   167   168   169   170   171   172   173   ...   256
sql osnovi yazika

ON CONFLICT ON CONSTRAINT aircrafts_tmp_pkey
DO UPDATE SET model = excluded.model,
range = excluded.range
RETURNING *;
Поскольку мы включили в команду предложение RETURNING *, то СУБД сообщит
о том, какие значения получат атрибуты обновленной строки. Как и планировалось,
изменилось только значение атрибута model.
aircraft_code |
model
| range
---------------+-----------------+-------
SU9
| Sukhoi SuperJet | 3000
(1 строка)
В случае конфликта по столбцу aircraft_code будет обновлена та строка в табли-
це aircrafts_tmp, с которой конфликтовала вновь добавляемая строка. В резуль-
тате новая строка добавлена не будет, а будет обновлено значение столбца model
в строке, уже находящейся в таблице. А где PostgreSQL возьмет значение для ис-
пользования в команде UPDATE? Это значение будет взято из специальной таблицы
excluded, которая поддерживается самой СУБД. В этой таблице хранятся все строки,
предлагаемые для вставки в рамках текущей команды INSERT. Вот это значение —
excluded.model. Значение столбца range также будет обновлено, но его новое зна-
чение — excluded.range — совпадает со старым.
Обратите внимание, что в предложении DO UPDATE не указывается имя таблицы, т. к.
таблица будет та же самая, которая указана в предложении INSERT.
Предложение ON CONFLICT DO UPDATE гарантирует атомарное выполнение опера-
ции вставки или обновления строк. Атомарность означает, что проверка наличия
конфликта и последующее обновление выполняются как неделимая операция, т. е.
другие транзакции не могут изменить значение столбца, вызывающее конфликт, так,
чтобы в результате конфликт исчез и уже стало возможным выполнить операцию
INSERT, а не UPDATE, или, наоборот, в случае отсутствия конфликта он вдруг появил-
ся, и уже операция INSERT стала бы невозможной. Такая атомарная операция даже
имеет название UPSERT — «UPDATE или INSERT».
Для массового ввода строк в таблицы используется команда COPY. Эта команда может
копировать данные из файла в таблицу. Причем, в качестве файла может служить и
стандартный ввод. Хотя в этом разделе пособия мы, в основном, говорим о вставке
строк в таблицы, но нужно сказать и о том, что эта команда может также копировать
данные из таблиц в файлы и на стандартный вывод.
217




Достарыңызбен бөлісу:
1   ...   166   167   168   169   170   171   172   173   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет