Подключение базы данных к n8n: Полное руководство
n8n — это инструмент автоматизации рабочих процессов с открытым исходным кодом, который позволяет интегрировать различные сервисы и системы. Ключевой особенностью n8n является его способность напрямую взаимодействовать с базами данных, что открывает возможности для чтения, записи, обновления и удаления данных в рамках автоматизированных процессов (воркфлов). Подключение базы данных к n8n осуществляется через специализированные узлы (ноды), которые поддерживают широкий спектр СУБД.
Поддерживаемые системы управления базами данных
n8n предлагает нативные узлы для наиболее популярных реляционных и нереляционных баз данных. Поддержка реализована как через встроенные узлы, так и через возможность выполнения произвольных SQL-запросов.
- Реляционные (SQL) БД: PostgreSQL, MySQL, MariaDB, Microsoft SQL Server, SQLite.
- Нереляционные и облачные БД: QuestDB, TimescaleDB, CrateDB, CockroachDB.
- Облачные сервисы: Google Cloud Firestore, AWS DynamoDB (через узел AWS).
- Прочие: Также доступны узлы для ClickHouse, Redis и Supabase. Для баз данных, подключаемых через ODBC, или менее распространенных СУБД можно использовать узел «Execute Command» для запуска скриптов или HTTP-запросы к их API.
- Создание базы данных:
CREATE DATABASE n8n_workflow; - Создание пользователя:
CREATE USER n8n_user WITH ENCRYPTED PASSWORD 'your_strong_password'; - Предоставление прав:
GRANT ALL PRIVILEGES ON DATABASE n8n_workflow TO n8n_user; - Execute Query: Выполнение произвольного SQL-запроса. Самый гибкий вариант.
- Insert: Вставка одной или нескольких записей в указанную таблицу.
- Update: Обновление записей в таблице.
- Delete: Удаление записей.
- Select: Выборка данных с возможностью указания условий, сортировки и пагинации.
INSERT INTO users (email, name) VALUES ('{{$json["email"]}}', '{{$json["firstName"]}}');SELECT- FROM orders WHERE created_at > '{{$node["AnotherNode"].json["lastSyncDate"]}}';
- Использование учетных записей с минимальными привилегиями: Пользователь БД для n8n должен иметь права только на необходимые таблицы и операции, а не права суперпользователя.
- Шифрование соединения (SSL/TLS): Всегда используйте SSL при подключении к облачным или внешним базам данных.
- Хранение секретов: Учетные данные хранятся в зашифрованном виде в базе данных n8n. Для production-среды настройте внешнее хранилище секретов, используя переменные окружения (environment variables) в конфигурации n8n.
- Валидация входных данных: При формировании SQL-запросов на основе внешних данных используйте параметризованные запросы (где это поддерживается узлом) или тщательную проверку (санитизацию) входных данных во избежание SQL-инъекций.
- Пулинг соединений: n8n управляет пулом соединений с БД автоматически, но для высоконагруженных воркфлов рекомендуется мониторинг и возможная настройка лимитов соединений на стороне СУБД.
- Узел «Schedule Trigger»: Запускает воркфл каждый час.
- Узел «PostgreSQL» (Select): Выбирает из таблицы заказы, созданные за последний час.
- Узел «Code» или «Function»: Преобразует данные, добавляя вычисляемые поля.
- Узел «Google Sheets»: Записывает обработанные данные в отчетную таблицу.
- Узел «Telegram»: Отправляет уведомление администратору об успешном выполнении или, в случае ошибки (обработанной через отдельную ветку), об ошибке.
- HTTP Request: Если БД предоставляет REST API (как многие современные облачные БД).
- Execute Command: Для запуска скриптов (например, Python, Node.js), которые используют родные драйверы для подключения к БД. Этот подход требует установки соответствующих библиотек на сервер n8n.
- Для импорта: Read from File (CSV/Excel) -> PostgreSQL (Insert).
- Для экспорта: PostgreSQL (Select) -> Code (при необходимости преобразовать) -> Spreadsheet File (Write to file).
Архитектура подключения и требования
Для успешного подключения n8n к базе данных необходимо обеспечить сетеую доступность. n8n, работающий в контейнере Docker или на отдельном сервере, должен иметь возможность устанавливать TCP-соединение с хостом базы данных на определенном порту. Часто требуется настройка правил межсетевого экрана (фаервола) и конфигурации самой СУБД для приема внешних подключений (например, параметр listen_addresses в PostgreSQL).
Пошаговая инструкция по подключению на примере PostgreSQL
1. Подготовка базы данных
Создайте базу данных, пользователя и предоставьте необходимые привилегии. Пример для PostgreSQL:
2. Добавление узла базы данных в воркфл
В редакторе n8n найдите узел «PostgreSQL». Его можно найти через поиск или в разделе «Database». Перетащите узел на холст.
3. Настройка параметров подключения (Credentials)
При первом открытии узла необходимо создать новые учетные данные (Credentials). Заполните форму:
| Параметр | Описание | Пример значения |
|---|---|---|
| Host | Имя хоста или IP-адрес сервера БД. | localhost, 192.168.1.100, db.example.com |
| Database | Имя базы данных. | n8n_workflow |
| User | Имя пользователя для подключения. | n8n_user |
| Password | Пароль пользователя. | your_strong_password |
| Port | Порт для подключения. | 5432 (стандартный для PostgreSQL) |
| SSL | Включение SSL-шифрования соединения. Рекомендуется для облачных БД. | require / disable |
После заполнения нажмите «Save». Учетные данные будут зашифрованы и сохранены для повторного использования в других узлах.
4. Настройка операции узла (Operation)
После установки соединения настройте, какую операцию должен выполнить узел. Основные операции:
5. Использование выражений (Expressions) для динамических запросов
Мощь n8n раскрывается при использовании выражений для динамического формирования запросов на основе данных предыдущих узлов. Например, в узле в режиме «Execute Query» можно написать:
Это позволяет создавать сложные зависимые воркфлы, где база данных взаимодействует с данными из Telegram, Google Sheets, CRM-систем и других сервисов.
Особенности подключения других СУБД
MySQL / MariaDB
Процесс аналогичен PostgreSQL. Обратите внимание на необходимость корректной настройки кодировки (часто требуется utf8mb4 для поддержки всех символов Unicode) в параметрах подключения. В узле доступны те же основные операции.
SQLite
Для SQLite требуется указать абсолютный путь к файлу базы данных на сервере, где работает n8n. Узел не требует ввода логина и пароля. Важно обеспечить права на чтение/запись для процесса n8n.
Microsoft SQL Server
Помимо стандартных параметров, может потребоваться указание экземпляра (instance) и настройка драйвера. Для облачных инстансов (например, Azure SQL) обязательно использование SSL.
Обработка результатов и ошибок
Результат выполнения запроса возвращается узлом в виде массива объектов JSON и передается на следующие узлы. Для операций INSERT, UPDATE, DELETE часто возвращается информация о количестве затронутых строк.
Для обработки ошибок (например, нарушения уникальности ключа, синтаксической ошибки в SQL) используйте узел «Error Trigger» или настройте ветвление воркфла на основе вывода узла базы данных. Это обеспечивает отказоустойчивость автоматизации.
Безопасность и лучшие практики
Интеграция базы данных в сложные воркфлы
База данных часто выступает центральным хранилищем или связующим звеном воркфла. Пример сценария:
Ответы на часто задаваемые вопросы (FAQ)
Как подключиться к базе данных, для которой нет специального узла в n8n?
Используйте универсальные узлы:
Можно ли использовать одну настройку подключения (Credentials) в нескольких узлах одного воркфла?
Да, именно для этого и предназначена система Credentials. Создав один раз учетные данные для базы данных, вы можете выбрать их в настройках любого узла, работающего с этой же БД, в рамках одного или даже разных воркфлов (в зависимости от настроек общего доступа к Credentials).
Как выполнить транзакцию (начать, закоммитить, откатить)?
Нативные узлы баз данных в n8n обычно выполняют каждый запрос в режиме авто-коммита. Для выполнения группы запросов как единой транзакции необходимо использовать узел в режиме «Execute Query» и написать явную SQL-транзакцию. Например, для PostgreSQL: BEGIN; UPDATE accounts SET balance = balance - 100 WHERE id=1; UPDATE accounts SET balance = balance + 100 WHERE id=2; COMMIT;. Убедитесь, что весь блок транзакции выполняется в одном узле.
Почему узел не подключается к базе данных, работающей на localhost?
Если n8n запущен в Docker-контейнере, то localhost для него — это сам контейнер, а не хост-машина. Используйте специальный DNS-адрес host.docker.internal (для Windows/Mac) или IP-адрес хоста в сети Docker (обычно 172.17.0.1) для Linux. Альтернативно, запустите n8n и БД в одной Docker-сети и используйте имя сервиса контейнера с БД в качестве хоста.
Как импортировать или экспортировать данные из/в CSV/Excel файл через базу данных?
Постройте воркфл из нескольких узлов:
Как ограничить количество возвращаемых строк в запросе SELECT?
В узле для операций SELECT есть отдельное поле «Limit» для указания максимального количества строк. Также вы можете использовать стандартный SQL-синтаксис, например, LIMIT 100, в режиме «Execute Query».
Можно ли использовать переменные окружения в настройках подключения к БД?
Да, это рекомендуемый способ для повышения безопасности. В полях настроек Credentials (Host, User, Password и т.д.) вместо явного значения укажите выражение, например, {{$env.DB_PASSWORD}}. Предварительно задайте переменную окружения DB_PASSWORD в системе, где запущен n8n, или в файле .env.
Подключение базы данных к n8n превращает его из инструмента интеграции приложений в мощную платформу для автоматизации бизнес-логики, связанной с данными. Правильная настройка, соблюдение принципов безопасности и использование выражений позволяют создавать надежные, сложные и полностью автоматизированные рабочие процессы, центром которых является ваша база данных.
Комментарии