Middle
Telefon numarasıyla benzersiz anahtara sahip bir tabloya tekrar eden bir kayıt eklerken, hata yerine mevcut kaydın güncellenmesini nasıl sağlayabilirsiniz (INSERT ON CONFLICT DO UPDATE)?
sobes.tech yapay zeka
AI'dan gelen yanıt
В 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 {
// обработка ошибки
}
Таким образом, при вставке дублирующей записи не будет ошибки, а данные обновятся.