Middle
¿Cómo hacer que, al insertar un registro duplicado en una tabla con clave única en el número de teléfono, en lugar de un error se actualice el registro existente (INSERT ON CONFLICT DO UPDATE)?
sobes.tech AI
Respuesta de la IA
В 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 {
// обработка ошибки
}
Таким образом, при вставке дублирующей записи не будет ошибки, а данные обновятся.