Sobes.tech
Middle

Телефон номери боюнча уникалдуу ачкыч менен таблицага дубл жазуу киргизилсе, катанын ордуна бардыгы барганча жазууну жаңыртуу үчүн кандай кылуу керек (INSERT ON CONFLICT DO UPDATE)?

sobes.tech AI

AIден жооп

В PostgreSQL для вставки записи с обновлением при конфликте по уникальному ключу используется конструкция INSERT ... ON CONFLICT ... DO UPDATE. В Go с использованием пакета database/sql или ORM (например, pgx, gorm) можно выполнить такой запрос напрямую.

Пример SQL-запроса:

INSERT INTO users (phone, name, email) VALUES ($1, $2, $3)
ON CONFLICT (phone) DO UPDATE SET
  name = EXCLUDED.name,
  email = EXCLUDED.email;

Здесь phone — уникальный ключ. При попытке вставить дубликат по phone произойдет обновление полей name и email существующей записи.

Пример на Go с использованием database/sql:

query := `
INSERT INTO users (phone, name, email) VALUES ($1, $2, $3)
ON CONFLICT (phone) DO UPDATE SET
  name = EXCLUDED.name,
  email = EXCLUDED.email;
`
_, err := db.Exec(query, phone, name, email)
if err != nil {
    // обработка ошибки
}

Таким образом, при вставке дублирующей записи не будет ошибки, а данные обновятся.