Обновление в SQL: первые шаги с UPDATE в PostgreSQL 16
За 15–20 минут вы научитесь менять одну или несколько строк в PostgreSQL 16 и проверять результат до фиксации изменений. Потренируемся на тестовой таблице, чтобы не затронуть реальные данные.

За 15–20 минут вы научитесь обновлять записи в PostgreSQL 16 с помощью UPDATE, проверять, какие строки изменились, и отменять тестовую правку. Все примеры работают на отдельной демонстрационной таблице: реальные данные для практики не нужны.
Что понадобится перед началом
Нужен PostgreSQL 16 и подключение к тестовой базе через любой SQL-клиент: например, psql или графический интерфейс. Права на создание таблиц понадобятся только для первого шага. Если прав нет, попросите администратора создать таблицу или потренируйтесь в личной тестовой базе. Не запускайте учебные запросы на таблице с данными клиентов или заказов.
Примеры написаны для PostgreSQL 16. Базовый синтаксис UPDATE похож в других СУБД, но некоторые детали и сообщения об ошибках отличаются. Если вы работаете не с PostgreSQL, сверьте команды с документацией своей базы.
Первые шаги: обновляем записи
Создайте таблицу с тестовыми товарами. Скрипт удалит таблицу с таким именем, если вы уже запускали его раньше, затем создаст её заново и добавит три записи. Используйте это имя только в тестовой базе.
DROP TABLE IF EXISTS sql_update_demo; CREATE TABLE sql_update_demo ( id integer PRIMARY KEY, product_name text NOT NULL, price numeric(10, 2) NOT NULL CHECK (price >= 0), active boolean NOT NULL ); INSERT INTO sql_update_demo (id, product_name, price, active) VALUES (1, 'Блокнот', 990.00, true), (2, 'Настольная лампа', 2450.00, true), (3, 'Подставка', 1500.00, false);Проверка: клиент должен сообщить об успешном создании таблицы и добавлении трёх строк. Если видите ошибку о недостатке прав, остановитесь и попросите создать тестовую таблицу в другой базе.
Посмотрите на исходные данные. Перед изменением выполните запрос, чтобы знать, что именно хранится в таблице. Условие можно уточнить по идентификатору товара.
SELECT id, product_name, price, active FROM sql_update_demo ORDER BY id;Проверка: вернутся три строки. Запомните цену товара с
id = 2: в следующем шаге изменится именно она.Измените одну запись. После
SETукажите столбец и новое значение, а вWHERE— условие, по которому база найдёт нужную строку.UPDATE sql_update_demo SET price = 1290.00 WHERE id = 2 RETURNING id, product_name, price;Проверка: команда вернёт товар с
id = 2и ценой1290.00. В PostgreSQLRETURNINGпоказывает значения обновлённых строк сразу после изменения.Проверьте условие до массовой правки. Одно условие может затронуть не одну строку. Сначала выполните соответствующий
SELECTи убедитесь, что выборка ожидаемая.SELECT id, product_name, price FROM sql_update_demo WHERE active = true AND price < 1000 ORDER BY id;В этом наборе условию соответствует блокнот. Теперь можно поднять цену найденных товаров на 5%:
UPDATE sql_update_demo SET price = price * 1.05 WHERE active = true AND price < 1000 RETURNING id, product_name, price;Проверка: запрос должен вернуть одну строку — блокнот с новой ценой. Если в
SELECTперед обновлением оказались лишние записи, не выполняйтеUPDATE: уточните условие.Потренируйтесь отменять изменение. Транзакция позволяет сначала выполнить правку и проверить её, а затем подтвердить или отменить. Запустите весь блок в одном подключении.
BEGIN; UPDATE sql_update_demo SET active = false WHERE id = 1 RETURNING id, active; SELECT id, active FROM sql_update_demo WHERE id = 1; ROLLBACK; SELECT id, active FROM sql_update_demo WHERE id = 1;Проверка: внутри транзакции значение станет
false, а послеROLLBACKснова будетtrue. Для сохранения изменений вместо отмены в конце транзакции используютCOMMIT; не отправляйте его, пока не проверили результат.
Что здесь важно не перепутать
UPDATE без WHERE обновит каждую строку таблицы. Это не ошибка синтаксиса, а потенциально дорогая ошибка в данных. Для учебной таблицы последствия невелики; в рабочей базе массовая правка может затронуть тысячи или миллионы записей и потребовать восстановления из резервной копии.
Перед каждым UPDATE ответьте на два вопроса: какие строки выберет его WHERE и как вы проверите результат до COMMIT?
Сноска: транзакция — группа операций, которую можно подтвердить целиком командой COMMIT или отменить командой ROLLBACK. Это помогает контролировать изменения, но не заменяет резервное копирование и проверку условий.
Если не получилось
Сообщение
relation "sql_update_demo" does not exist. Таблица не создана в этой базе или текущая сессия подключена не туда. Проверьте подключение и выполните шаг 1.Сообщение
column ... does not exist. Проверьте имя столбца: в примере используютсяid,product_name,priceиactive. Имена должны соответствовать существующим столбцам.Запрос вернул
UPDATE 0или пустой результатRETURNING. Ни одна строка не подошла под условие. Повторите его вSELECT, проверьте идентификатор и значения, а не убирайтеWHEREнаугад.Нарушено ограничение
CHECK. Например, база не примет отрицательную цену: таблица требует, чтобыprice >= 0. Проверьте значение и бизнес-правило; не удаляйте ограничение ради выполнения запроса.Транзакция осталась незавершённой. Если после
BEGINзапрос завершился ошибкой, PostgreSQL может не выполнять следующие команды этой транзакции. Отмените её командойROLLBACK, исправьте запрос и начните проверку заново.
Что делать дальше
Повторите упражнение на тестовой таблице с другим условием, например выберите запись по product_name. Перед каждым изменением сравнивайте результат SELECT с ожидаемым, а после обновления проверяйте возвращённые строки через RETURNING. Когда перейдёте к рабочей базе, выясните, как в вашей команде создают резервные копии и кто подтверждает массовые изменения.
Инвалидация кэша и согласованность изменений между несколькими таблицами — отдельные темы; здесь разобраны только базовые обновления строк в PostgreSQL.
Проверка рекламы на риски: Что в макете вызовет вопросы ФАС: превосходные степени, сравнения, обещания результата, маркировка.
Спросить за 40 ₽Источники: PostgreSQL 16: UPDATE, PostgreSQL 16: транзакции
Частые вопросы
Что будет, если написать UPDATE без WHERE?
Как понять, сколько строк изменилось?
Можно ли отменить UPDATE после выполнения?
Что делать, если UPDATE изменил ноль строк?
Подойдут ли эти запросы для MySQL или SQLite?
Нужно ли оборачивать каждое изменение в транзакцию?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.