Миграция на Supabase.День 2: HTTP, UPSERT, error foreign key
😊 Всем привет! Продолжаю делиться историей миграции TG-бота с Firebase на Supabase в n8n.
В этот раз началось всё радужно: коннект к базе поднялся с полпинка, таблицы на месте. Казалось бы, какие могут быть проблемы — задача-то на час.
😅 Но не тут-то было! Как говориться: чёрт кроется в деталях. Я решил заменить старые Firestore-ноды, которые сам же и настраивал, на новые SupaBase узлы. Но оказалось, что у них недостаточно функционала. к примеру нет обработки дубликатов.
🤔 И чё делать? — думаю я. К счастю, ответ пришёл достаточно быстро: более гибкие HTTP-запросы. Снова меняю и снова упираюсь в стену: на этот раз с ошибкой foreign key constraint. Если в старых нодах Firebase эта проблема не возникала ввиду совершенно иной структуры БД, то голый HTTP-запрос требовал ручного контроля. База просто не давала создать дочернюю запись без родительской. После часа безуспешных попыток впихнуть всё в один запрос, долгожданное решение пришло Необходимо делать всё в два этапа. Во-первых, нашел "спасательный" заголовок Prefer: resolution=merge-duplicates. Да это же чистый UPSERT! Отправляешь данные, а база сама решает: хочет — обновляет, а хочет — создаёт. Прелестно! Во-вторых, вместо одной сложной ноды — две простые и последовательные. Одна создает родительскую запись, вторая, следом — дочернюю. И... О, чудо! Всё взлетело! 🔥
Вывод: Переход с высокоуровневых интеграций на базовые протоколы — это сложно. Но огромный плюс к гибкости. Теперь воркфлоу прозрачнее, а я полностью контролирую логику.
💡 Урок дня: Как бы привлекательно и заманчиво не выглядели готовые «коробочные» интеграции, решения на более низком уровне ВСЕГДА будут стабильнее и эффективнее.
❓ Сталкивались с подобной ситуацией, когда "простая" замена превращалась в многочасовой квест с подводными камнями?