Middle
Hoe zorg je ervoor dat bij het invoegen van een dubbele record in een tabel met een unieke sleutel op telefoonnummer, in plaats van een fout, de bestaande record wordt bijgewerkt (INSERT ON CONFLICT DO UPDATE)?
sobes.tech AI
Antwoord van 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 {
// обработка ошибки
}
Таким образом, при вставке дублирующей записи не будет ошибки, а данные обновятся.