Apache DolphinScheduler PostgreSQL 数据源接入指南
2026/9/15 17:45:37 网站建设 项目流程

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:getshadeclassifier 下载对应插件包。

激活 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询