TGViewer
SQL Ready | Базы Данных SQL Ready | Базы Данных @sql_ready · 17.5K subscribers
Post #1152 4.29K
UPSERT: вставляем или обновляем запись!

Нередко требуется добавить данные без риска дубликата. Реализуем UPSERT — вставка при отсутствии и обновление при конфликте.

Задаём таблицу:
CREATE TABLE users (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
login_count INT NOT NULL DEFAULT 0
);


Пробная вставка:
INSERT INTO users (email, login_count)
VALUES ('alice@mail.com', 1);


UPSERT при конфликте (увеличиваем счётчик и сразу возвращаем результат):
INSERT INTO users AS u (email, login_count)
VALUES ('alice@mail.com', 1)
ON CONFLICT (email) DO UPDATE
SET login_count = u.login_count + EXCLUDED.login_count
RETURNING email, login_count;


Результат:
email           | login_count
----------------+------------
alice@mail.com | 2


🔥 Такой приём избавляет от дубликатов и делает вставку надёжной.

➡️ SQL Ready | #практика
  • 👍 16
  • ❤ 11
  • 🔥 5
  • 🤝 1
More from @sql_ready
  1. Oct 12, 2026Обновляйте несколько колонок одним подзапросом! Вместо нескольких одинаковых подзапросов:…
  2. Oct 9, 2026❤️ sqlite-postgres-cours — большой практический курс по базам данных! Материал ведёт от пе…
  3. Oct 8, 2026Почему UNIQUE допускает несколько NULL в PostgreSQL! Ограничение UNIQUE гарантирует уникал…
  4. Oct 7, 2026📂 Шпаргалка по паттернам распределённых систем! Например, Replication повышает доступност…
  5. Oct 6, 2026Проверяйте связи с учётом периода! В PostgreSQL 18 связь может учитывать ещё и период его…
  6. Oct 6, 2026👍 Устройство PostgreSQL — подробная документация на русском языке! Материалы посвящены не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →