PostgreSQL JDBC в NiFi: настройка DBCPConnectionPool
В NiFi JDBC-подключение обычно задаётся в Controller Service вроде DBCPConnectionPool. Процессор ExecuteSQL ссылается на этот сервис; не нужно искать все параметры драйвера в самом процессоре. Сначала согласуйте версии NiFi, JDK и PostgreSQL JDBC, затем выберите поддерживаемый JAR драйвера.
Настроить Controller Service
| Параметр | Пример или назначение |
|---|---|
| Database Connection URL | jdbc:postgresql://db.example.test:5432/app?sslmode=verify-full |
| Database Driver Class Name | org.postgresql.Driver |
| Database Driver Locations | Доступный сервису путь к проверенному PostgreSQL JDBC JAR |
| Database User | Отдельная роль с необходимыми правами |
| Пароль | Чувствительное свойство или поддерживаемый password provider |
Путь к JAR должен быть доступен процессу NiFi; в кластере проверьте все узлы. Для verify-full требуется правильное имя сервера и доверенная цепочка сертификата. Не добавляйте пароль в URL: URL не является чувствительным свойством в описании DBCPConnectionPool.
Сначала запрос без изменений данных
Создайте ExecuteSQL и в Database Connection Pooling Service выберите настроенный сервис. Начните с фиксированного запроса, не читающего пользовательские таблицы:
SELECT 1 AS connection_ok;Включите сервис и проверьте validation errors, затем выполните один контролируемый запуск процессора. Успех показывает, что соединение и простой запрос работают; он не доказывает права на все таблицы. Для чтения данных приложению выдавайте только необходимые SELECT-права.
Обработать результат правильно
Проверьте формат FlowFile по документации именно установленного процессора. ExecuteSQL использует Avro для результата набора строк; текстовый JSON нельзя предполагать по имени операции. Для Record-потока выберите совместимые reader/writer и явно настройте логические типы чисел и дат.
Запросы и повторные попытки
- Для параметров используйте поддерживаемые JDBC-аргументы, например sql.args.N.type/value, вместо конкатенации пользовательского текста в SQL.
- INSERT/UPDATE требуют отдельной проверки транзакций и идемпотентности. Для такой задачи обычно выбирают специализированный PutSQL/PutDatabaseRecord, а не переносят read-пример механически.
- Разведите маршруты success/failure, ограничьте частоту запуска, объём результата и повторные попытки.
- Ошибка драйвера, DNS, TLS, пароля и прав на таблицу — разные причины. Сохраняйте техническую диагностику без credentials и содержимого чувствительных строк.