Middle
58
Есть таблица с уникальным ключом по номеру телефона. Как сделать так, чтобы при вставке дублирующей записи вместо ошибки происходило обновление существующей записи (INSERT ON CONFLICT DO UPDATE)?
Сұралған компаниялар
Япоки
AI-дан жауап
sobes.tech 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 {
// обработка ошибки
}
Таким образом, при вставке дублирующей записи не будет ошибки, а данные обновятся.