Apache DolphinScheduler PostgreSQL 数据源接入指南
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
PostgreSQL 是 Apache DolphinScheduler 中最常用的数据源类型之一,既可作为任务执行的 SQL 引擎目标,也是 DolphinScheduler 自身元数据库的默认选项之一。本文以官方文档 POSTGRESQL 数据源 为主线,完整讲解在 DolphinScheduler 中创建 PostgreSQL 数据源的每一步操作、底层 JDBC 连接参数的生成逻辑,以及从 3.3.0 版本开始"非原生支持"的数据源插件激活方法,帮助你一次性打通从配置界面到任务执行的全链路。
一、在 DolphinScheduler 中创建 PostgreSQL 数据源
在 DolphinScheduler Web UI 中,进入数据源中心 → 创建数据源页面,选择POSTGRESQL类型后,需要填写以下字段:
| 表单字段 | 说明 |
|---|---|
| 数据源 | 选择 POSTGRESQL |
| 数据源名称 | 输入数据源的名称(后续创建 SQL 任务时按此名称引用) |
| 描述 | 输入数据源的描述信息(可选) |
| IP 主机名 | 输入连接 POSTGRESQL 的 IP |
| 端口 | 输入连接 POSTGRESQL 的端口(默认 5432) |
| 用户名 | 设置连接 POSTGRESQL 的用户名 |
| 密码 | 设置连接 POSTGRESQL 的密码 |
| 数据库名 | 输入连接 POSTGRESQL 的数据库名称 |
| Jdbc 连接参数 | 用于 POSTGRESQL 连接的参数设置,以 JSON 形式填写 |
其中Jdbc 连接参数是以 JSON 形式填写的键值对,例如:
{ "serverTimezone": "Asia/Shanghai", "stringtype": "unspecified", "ApplicationName": "dolphinscheduler" }填写完成后点击"测试连接"验证连通性,通过后保存即可。之后在 SQL 任务的"数据源"下拉框中即可选择该 PostgreSQL 数据源。
二、是否原生支持:3.3.0 之后的插件激活
官方文档明确说明:PostgreSQL 数据源"否",非原生支持,使用前需要参考 伪集群部署 中的"下载插件依赖"章节激活数据源。
原因在于:从 3.3.0 版本开始,DolphinScheduler 的二进制发布包不再内置任何插件依赖,所有插件(包括数据源插件)都需要用户自行下载并放入plugins目录。仓库中的 install-plugins.sh 脚本会读取 config/plugins_config 配置,通过mvnw dependency:get以shadeclassifier 下载对应插件包。
激活 PostgreSQL 数据源有两种方式:
方式一:全量安装所有插件
bash ./bin/install-plugins.sh 3.3.0方式二:只安装你需要的插件
编辑conf/plugins_config文件,在--datasource-plugins--段中保留dolphinscheduler-datasource-postgresql,然后执行安装脚本:
--datasource-plugins-- dolphinscheduler-datasource-postgresql --end--bash ./bin/install-plugins.sh 3.3.0当前仓库根目录的 config/plugins_config 中,--datasource-plugins--段默认就包含dolphinscheduler-datasource-postgresql这一行。插件依赖(如postgresqlJDBC 驱动)不会随二进制包附带,若启动时遇到ClassNotFoundException,请检查是否缺少对应的插件依赖包。
三、源码级原理:JDBC 连接是如何生成的
PostgreSQL 数据源的连接参数并非前端直连数据库,而是由插件模块dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-postgresql在服务端统一组装。核心类是 PostgreSQLDataSourceProcessor.java:
1. 连接地址与 JDBC URL 的拼接
String address = String.format("%s%s:%s", DataSourceConstants.JDBC_POSTGRESQL, postgreSqlParam.getHost(), postgreSqlParam.getPort()); String jdbcUrl = String.format("%s/%s", address, postgreSqlParam.getDatabase());即最终得到形如jdbc:postgresql://<host>:<port>/<database>的 JDBC URL。这一点在单元测试 PostgreSQLDataSourceProcessorTest.java 中有直接断言:jdbc:postgresql://localhost:3308/default。
2. 驱动类与校验 SQL
驱动类名和连接校验语句定义在 DataSourceConstants.java:
- 驱动:
org.postgresql.Driver(常量ORG_POSTGRESQL_DRIVER) - 连接校验语句:
select version()(常量POSTGRESQL_VALIDATION_QUERY,PostgreSQL 特有的校验方式)
对应的 getter 见PostgreSQLDataSourceProcessor#getDatasourceDriver()与#getValidationQuery()。
3. 密码加密存储
数据源保存时,密码会通过PasswordUtils.encodePassword()加密后存入PostgreSQLConnectionParam,建立真实连接时再通过PasswordUtils.decodePassword()解密,避免明文落库。
4. Jdbc 连接参数的 URL 化拼接
界面填写的 JSON 形式的"Jdbc 连接参数"会被解析为Map<String, String>,在真正获取连接时通过transformOther()转换为key=value形式并以&连接,追加到 JDBC URL 的?之后:
if (MapUtils.isNotEmpty(postgreSqlConnectionParam.getOther())) { return String.format("%s?%s", postgreSqlConnectionParam.getJdbcUrl(), transformOther(postgreSqlConnectionParam.getOther())); }测试用例验证了该行为:other=other会被拼成jdbc:postgresql://localhost:3308/default?other=other。
5. 连接池与临时连接
PostgreSQL 数据源同时提供两种连接客户端,由 PostgreSQLDataSourceChannel.java 统一创建:
PostgrePooledSQLDataSourceClient(继承自BasePooledDataSourceClient):用于任务执行的连接池客户端;PostgreAdHocSQLDataSourceClient:用于临时/即席查询的客户端。
6. SQL 分割的 PostgreSQL 方言支持
PostgreSQLDataSourceProcessor#splitAndRemoveComment()使用 Druid 的 PostgreSQL 方言解析器去除 SQL 注释,并实现了对 PostgreSQL 特有的**美元引号(dollar-quote)**块(如$DO$ ... $DO$、函数体$$ ... $$)的识别,分割 SQL 语句时不会错误地把美元引号内的分号当作语句结束符,从而保证存储过程、函数定义等含$块的 SQL 能被正确逐条执行。
四、PostgreSQL 作为 DolphinScheduler 元数据库
除作为任务数据源外,PostgreSQL 也是 DolphinScheduler 支持的元数据库选项之一。在伪集群部署中,通过bin/env/dolphinscheduler_env.sh环境配置文件指定:
export DATABASE=${DATABASE:-postgresql} export SPRING_PROFILES_ACTIVE=${DATABASE} export SPRING_DATASOURCE_URL="jdbc:postgresql://127.0.0.1:5432/dolphinscheduler" export SPRING_DATASOURCE_USERNAME={user} export SPRING_DATASOURCE_PASSWORD={password}数据库的创建与初始化请参考 数据源配置 中的"伪分布式/分布式安装初始化数据库"章节。注意dolphinscheduler_env.sh中的配置会覆盖各服务application.yaml中的同名配置(如SPRING_DATASOURCE_URL对应spring.datasource.url)。
五、验证与排错
- 测试连接失败:检查 IP/端口是否可达、用户名密码是否正确、目标库是否存在,以及
plugins目录下是否已安装dolphinscheduler-datasource-postgresql插件包(ClassNotFoundException: org.postgresql.Driver通常就是缺少插件依赖)。 - 连接参数不生效:确认"Jdbc 连接参数"为合法 JSON,且键值能被 PostgreSQL JDBC 驱动识别(例如
stringtype=unspecified用于避免varchar类型参数被严格校验)。 - SQL 任务报错:若 SQL 中包含存储过程或
$tag$...$tag$美元引号块,确认使用的 DolphinScheduler 版本包含本文所述的美元引号感知分割逻辑。
通过以上配置与原理说明,你可以在 DolphinScheduler 中快速完成 PostgreSQL 数据源的接入,并在 SQL 任务中稳定执行查询、写入与存储过程调用。
【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考