Вставка в SQL для новичка: INSERT без ошибок
За 10–15 минут вы добавите одну запись и сразу несколько строк в PostgreSQL 16, проверите результат и разберётесь, почему запрос может завершиться ошибкой. Все примеры можно выполнить по порядку.

За 10–15 минут вы научитесь добавлять одну запись и несколько строк в таблицу PostgreSQL 16, а затем проверять результат. Для примеров понадобится доступ к базе данных; в конце вы сможете выполнить запросы в psql или SQL-редакторе и понять, что именно попало в таблицу.
Что нужно до начала
Примеры рассчитаны на PostgreSQL 16. Нужна созданная база данных и подключение к ней с правом выполнять запросы. Подойдёт psql или SQL-редактор вашей программы для работы с базой. Команды ниже создают собственную таблицу products; если она уже есть, выберите другое имя или используйте учебную базу.
Вставка выполняется командой INSERT. В запросе указывают таблицу, список столбцов и значения для новой строки. Явный список столбцов помогает не перепутать порядок и не зависит от того, какие поля добавят в таблицу позже.
Добавляем записи по шагам
Создайте таблицу. Выполните запрос целиком:
CREATE TABLE products ( id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name text NOT NULL, price numeric(10, 2) NOT NULL, stock integer NOT NULL DEFAULT 0 );Здесь
idбаза назначит автоматически, аstockполучит значение 0, если вы его не укажете. Проверка: редактор сообщает об успешном выполнении, а команда\d productsв psql показывает таблицу и её столбцы.Вставьте одну строку. Укажите столбцы, для которых задаёте значения, и передайте их в том же порядке:
INSERT INTO products (name, price, stock) VALUES ('Кабель USB-C', 890.00, 12) RETURNING id, name, price, stock;RETURNINGпросит PostgreSQL показать добавленную строку, включая созданный автоматически идентификатор. Проверка: в результате запроса отображается одна запись с названием «Кабель USB-C».Добавьте несколько строк одним запросом. Для каждой строки нужна отдельная группа значений в скобках:
INSERT INTO products (name, price, stock) VALUES ('Мышь', 1490.00, 8), ('Коврик', 650.00, 20) RETURNING id, name;Число значений и их порядок должны совпадать для каждой группы. Проверка: результат содержит две строки — по одной на каждый товар.
Используйте значение по умолчанию. Столбец
stockможно не включать в список:INSERT INTO products (name, price) VALUES ('Подставка для ноутбука', 2190.00) RETURNING id, name, stock;Так как для
stockзаданоDEFAULT 0, база поставит ноль. Проверка: у новой строки в выдаче указан остаток 0. Если столбец не имеет значения по умолчанию, а допускает пустое значение, пропуск поля дастNULL; это не то же самое, что ноль.Проверьте данные отдельным запросом. Например, выведите все добавленные товары по порядку:
SELECT id, name, price, stock FROM products ORDER BY id;Проверка: запрос показывает строки из предыдущих шагов. Если запускать примеры повторно, строки добавятся снова: сама команда
INSERTне проверяет, есть ли такой товар уже в таблице.
Из чего складывается INSERT
Базовая форма запроса в PostgreSQL выглядит так: INSERT INTO имя_таблицы (столбцы) VALUES (значения). Список столбцов можно опустить, но тогда значения придётся передать для всех столбцов таблицы в заданном порядке. Для первого знакомства так делать не стоит: явный список проще читать и безопаснее менять.
Текстовые значения заключают в одинарные кавычки: 'Мышь'. Числа пишут без кавычек: 1490.00. Строка и число — разные типы данных; неверный формат может закончиться ошибкой преобразования. Если значение содержит апостроф, его нужно корректно экранировать по правилам PostgreSQL, а пользовательский ввод в приложении следует передавать параметризованным запросом, а не склеивать с SQL-строкой.
Самая полезная привычка при INSERT — перечислять столбцы явно. Это делает запрос понятнее и защищает его от случайного изменения порядка полей.
Термин: ограничение — правило, которое база проверяет для данных. Например, NOT NULL запрещает оставить поле пустым, а PRIMARY KEY требует уникального идентификатора каждой строки.
Если запрос не выполнился
relation "products" does not exist— таблица с таким именем не найдена в текущей базе или схеме. Проверьте подключение, написание имени и то, выполнили ли вы командуCREATE TABLE.column "prcie" of relation "products" does not exist— в запросе указано имя столбца с опечаткой. Сверьте его со структурой таблицы; в примере правильноprice.null value in column "name" violates not-null constraint— для обязательного поля не передано значение либо явно указаноNULL. Передайте непустое название.INSERT has more expressions than target columns— значений вVALUESбольше, чем столбцов в спискеINSERT INTO. Сопоставьте их по числу и порядку.
Сообщения приведены в английском виде, как их обычно показывает PostgreSQL; клиент может добавить к ним детали или оформить текст иначе. При повторном запуске примеров не удаляйте таблицу на рабочей базе: сначала убедитесь, что в ней нет нужных данных.
Что делать дальше
Попробуйте добавить собственный столбец и вставить запись с его значением, затем проверьте результат через SELECT. Следующий важный шаг — изучить ограничения уникальности и обработку конфликтов: без них повторная отправка запроса может создать дубликаты. Если вставка идёт из приложения, отдельно разберитесь с параметризованными запросами и транзакциями. Транзакция — группа операций, которую база обрабатывает как единое целое; её поведение важно, когда запись состоит из нескольких связанных изменений.
Синтаксис и дополнительные возможности команды описаны в документации PostgreSQL 16. В других СУБД базовая форма INSERT похожа, но отдельные конструкции и правила могут отличаться.
IT-архитектор / SQL-оптимизатор: Поиск N+1, оптимизация запросов, code review, поиск багов.
Спросить за 20 ₽Источники: PostgreSQL 16: INSERT, PostgreSQL 16: CREATE TABLE
Частые вопросы
Можно ли выполнить эти запросы в MySQL или SQLite?
Почему после INSERT я не вижу добавленную строку?
Что будет, если запустить один INSERT дважды?
Обязательно ли перечислять столбцы после имени таблицы?
Как безопасно вставлять данные, которые ввёл пользователь?
Что проверить перед такой вставкой в рабочей базе?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.