使用PostgreSQL数据库

数据库选型建议

PIGX 官方目前主推 MySQL 8 和 达梦国产化数据库,建议优先在这两种数据库上跑通基础功能后,再探索使用其他类型的数据库。 由于底层采用了 MyBatis-Plus,已屏蔽大部分数据库间的差异。因此,只需通过工具将 MySQL 脚本转换为目标数据库的格式即可完成迁移,无需复杂的额外调整。

环境说明

依赖版本
数据库PostgreSQL 16.3
PIGX5.10
架构模式微服务
数据库同步工具dbswitch 1.9.8

① 同步 MySQL 最新脚本获取对应的 PostgreSQL 脚本

安装同步工具

docker run -d --name dbswitch  -e DBTYPE=h2  -p 9088:9088 
  registry.cn-hangzhou.aliyuncs.com/inrgihc/dbswitch:latest

在浏览器中访问:http://localhost:9088,默认账号密码:admin/123456

创建同步任务

  • 在"链接管理"中添加数据源,分别添加 MySQL(指向 PIGX 的 MySQL 数据库)和 PostgreSQL 的数据源(目标为 PIGX 的 PostgreSQL 数据库)。
数据源配置
  • 在"任务管理"中创建任务并启动执行。
创建任务 在配置目标端时,注意在【同步前置执行SQL脚本】中执行以下内容:
CREATE PROCEDURE RemoveNotNullConstraintsExceptPrimaryKey()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE tbl_name VARCHAR(255);
    DECLARE cur CURSOR FOR SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;

    read_loop: LOOP
        FETCH cur INTO tbl_name;
        IF done THEN
            LEAVE read_loop;
        END IF;

        -- 构建 ALTER 语句,排除主键列
        SET @alter_sql = (
            SELECT GROUP_CONCAT(CONCAT('MODIFY ', COLUMN_NAME, ' ', COLUMN_TYPE, ' NULL'))
            FROM information_schema.COLUMNS
            WHERE TABLE_SCHEMA = DATABASE()
            AND TABLE_NAME = tbl_name
            AND IS_NULLABLE = 'NO'
            AND COLUMN_KEY != 'PRI'
        );

        -- 执行修改表结构的 SQL
        IF @alter_sql IS NOT NULL THEN
            SET @full_alter_sql = CONCAT('ALTER TABLE ', tbl_name, ' ', @alter_sql);
            PREPARE stmt FROM @full_alter_sql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        END IF;

    END LOOP;

    CLOSE cur;
END //

DELIMITER ;

-- 调用存储过程
SET FOREIGN_KEY_CHECKS = 0;
CALL RemoveNotNullConstraintsExceptPrimaryKey();

② 修改数据库链接信息

单体架构可跳过
此步骤较为复杂:由于 Nacos 仅支持 MySQL,需要额外插件。如果使用单体架构且无需 Nacos,可直接跳过。

点击下载 nacos PG的数据库脚本

pigx-register 链接

  • pigx-register/pom.xml
<dependency>
    <groupId>com.sinhy</groupId>
    <artifactId>nacos-postgresql-datasource-plugin-ext</artifactId>
    <version>3.1.0</version>
</dependency>

<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
</dependency>
  • pigx-register/application.properties
spring.sql.init.platform=postgresql
db.num=1
db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos
db.user=postgres
db.password=postgres
db.pool.config.driver-class-name=org.postgresql.Driver

common-sequence 修改

  • pigx-common-sequence/pom.xml 中保留或修改成PostgreSQL驱动:
PostgreSQL驱动配置

修改各模块数据库链接信息

driver-class-name: org.postgresql.Driver
username: XX
password: XX
url: jdbc:postgresql://127.0.0.1:5432/DBNAME

Quartz 模块调整

任务调度兼容性

XXL 不支持 mysql 以外数据源,请使用 PIGX 内置的 Quartz 任务调度

  1. 表同步注意事项:数据库同步时不要同步 qrtz_* 开头的 Quartz 相关表

  2. 配置文件调整

    • 修改 quartz-config.yml 中的 initialize-schema: always
    • 首次启动时系统会自动创建所需的 Quartz 表结构,后续修改为 never
  3. 驱动委托类配置, 将 driverDelegateClass 调整为 PostgreSQL 专用委托类:

driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
Quartz配置