Ruoyi从mysql切换到postgresql的几个踩坑实战

2023-12-07数据库
689

Ruoyi从MySQL切换到PostgreSQL的几个踩坑实战

在使用Ruoyi框架时切换数据库是一个常见的需求,但是从MySQL切换到PostgreSQL这个过程中存在一些坑点,本文将详细讲解如何解决这些问题。

准备工作

在开始切换之前,需要确保具备以下条件:

  • 已经安装好PostgreSQL,并且开启了远程访问功能。
  • 确认Ruoyi框架的版本支持PostgreSQL,可参考 官方文档。
  • 确认原先使用的MySQL数据库中的数据可以导出到PostgreSQL数据库中。

步骤一:修改pom.xml文件

在pom.xml文件中添加PostgreSQL数据库驱动的依赖,这是连接PostgreSQL数据库的基础:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.18</version>
</dependency>

步骤二:配置数据源

修改 application-prod.yml 文件,使用spring.datasource下的url、username、password三个属性替换掉原先的MySQL配置,并将驱动改为PostgreSQL的驱动。

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:postgresql://127.0.0.1:5432/ruoyi?currentSchema=public
    username: postgres
    password: 123456
    filters: stat,wall
    driver-class-name: org.postgresql.Driver
    maxActive: 20
    initialSize: 1
    maxWait: 60000

需要注意的是,url中的currentSchema属性指定当前使用的Schema,需要根据实际情况进行修改。

步骤三:修改MyBatis的配置文件

修改 MyBatis 的配置文件 mybatis-config.xml,将原先的MySQL的MyBatis驱动改为PostgreSQL的驱动:

<configuration>
    <typeAliases>
        <!-- 其他配置省略 -->
    </typeAliases>

    <plugins>
        <!-- 其他配置省略 -->
    </plugins>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="org.postgresql.Driver"/>
                <property name="url" value="jdbc:postgresql://127.0.0.1:5432/ruoyi?currentSchema=public"/>
                <property name="username" value="postgres"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 其他配置省略 -->
    </mappers>
</configuration>

步骤四:数据迁移

使用 PostgreSQL 的工具将 MySQL 数据库中的数据迁移至 PostgreSQL 数据库中。

例如使用 pgloader 工具,可使用以下命令进行数据迁移:

pgloader mysql://user:password@hostname/database postgresql://user:password@hostname/ccddb

以上命令中,第一个参数表示 MySQL 的数据库连接信息,第二个参数表示 PostgreSQL 的数据库连接信息。

示例1:自定义SQL语句

在使用 Ruoyi 的查询功能时常常需要使用自定义SQL语句,这时候需要确认SQL语句兼容 PostgreSQL 数据库,以防出现语法错误。

例如原先使用的MySQL的自定义SQL语句:

<sql id="database.schema">
    `ruoyi` .
</sql>

如果需要在 PostgreSQL 数据库中使用,建议修改为:

<sql id="database.schema">
    "public".
</sql>

示例2:时间类型的问题

在使用 PostgreSQL 数据库时,需要注意时间类型的存储方式的不同。在MySQL中可以使用Date、DateTime类型,而在 PostgreSQL中需要使用Timestamp类型来存储时间信息。

因此在使用时间类型时,需要将对应的类型进行修改。

例如:

// 原先MySQL中
@Column(name="create_time")
private Date createTime;

// 修改后
@Column(name="create_time")
private Timestamp createTime;

结语

通过以上修改过程,可以成功将Ruoyi从MySQL切换到PostgreSQL,同时避免出现数据迁移和语法错误等问题。

The End

相关推荐

liunx mysql root账户提示:Your password has expired. To log in yo
liunx mysql root账户提示:Your password has expired. To log in you must change it using a client that supports expired passwords,要怎么操作呢? 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动...
2024-12-24 数据库
149

快速解决PostgreSQL中的Permission denied问题
下面是针对PostgreSQL中的权限问题的完整攻略。...
2023-12-07 数据库
3413

MySQL时间类型和模式详情
MySQL是一种流行的关系型数据库系统,它提供了多种时间类型和模式,用于存储和处理时间数据。本文将详细介绍MySQL时间类型和模式的详细攻略。...
2023-12-07 数据库
15

VMware中安装CentOS7(设置静态IP地址)并通过docker容器安装mySql数据库(超详细教程)
首先在官网下载CentOS7镜像,并在VMware虚拟机中新建一台CentOS7虚拟机,将镜像挂载到虚拟机中并启动。...
2023-12-07 数据库
11

SpringBoot项目报错:”Error starting ApplicationContext̷
首先,当我们使用Spring Boot开发项目时,可能会遇到Error starting ApplicationContext错误,一般这种错误是由于配置文件、依赖包或者代码逻辑等原因引起的。下面我将提供一条包含两条详细示例说明的完整攻略,用来解决上述问题。...
2023-12-07 数据库
489

Postgresql 赋予用户权限和撤销权限的实例
下面我将详细讲解如何为PostgreSQL数据库中的用户授予权限和撤销权限,包括两个实例。...
2023-12-07 数据库
30