首页 > 数据库 >数据迁移丨借助 AI 从 PostgreSQL 到 GreatSQL

数据迁移丨借助 AI 从 PostgreSQL 到 GreatSQL

时间:2025-01-20 10:10:54浏览次数:1  
标签:PostgreSQL AI GreatSQL greatsql pg 迁移 255

数据迁移丨借助 AI 从 PostgreSQL 到 GreatSQL

file

本文将介绍如何从 PostgreSQL 到 GreatSQL 的数据迁移,并运用 AI 协助迁移更加方便。迁移的方式有很多,例如:

  • pg_dump:导出SQL文件,修改后导入 GreatSQL 数据库。
  • COPY:导出txt文本文件,导入 GreatSQL 数据库。
  • pg2mysql:从 PostgreSQL 迁移到 MySQL/GreatSQL 工具。
  • GreatDTS:商业的异构数据库迁移工具。

本文将介绍 pg_dumpCOPY 两种方法迁移。

PostgreSQL 和 GreatSQL 区别

PostgreSQL

PostgreSQL是一个开源的对象关系型数据库管理系统(ORDBMS)。它的特色是强调扩展性、数据完整性和高级特性。PostgreSQL由社区维护和开发,具有出色的可定制性,可以适应各种不同的应用场景。它支持复杂的数据类型、JSON 数据存储、空间数据处理和全文搜索等特性。

GreatSQL

GreatSQL 数据库是一款 开源免费 数据库,可在普通硬件上满足金融级应用场景,具有 高可用、高性能、高兼容、高安全 等特性,可作为 MySQL 或 Percona Server for MySQL 的理想可选替换。

详细区别

对比项目 GreatSQL PostgreSQL
许可证 采用 GPLv2 协议 基于 PostgreSQL 许可下,是一种类似于 BSD 或 MIT 的自由开源许可
对象层次结构 4级(实例、数据库、表、列) 5级(实例、数据库、模式、表、列)
ACID事物 支持 支持
安全性 支持 RBAC、逻辑备份加密、CLONE 备份加密、审计、表空间国密加密、敏感数据脱敏 支持 RBAC、行级安全 (RLS)
JSON 支持(但和PG语法不同) 支持(但和GreatSQL语法不同)
复制 Binlog 进行逻辑复制 WAL 进行物理复制
大小写敏感 默认不敏感(默认不区分大小写) 默认大小写敏感(默认区分大小写)
参数值引号 使用双引号”“ 使用单引号‘’
数据类型 支持(但和PG语法不同) 支持(但和GreatSQL语法不同)
SQL语法 支持(但和PG语法不同) 支持(但和GreatSQL语法不同)
函数 支持(但和PG语法不同) 支持(但和GreatSQL语法不同)
表和索引 支持(但和PG语法不同) 支持(但和GreatSQL语法不同)
自增 AUTO_INCREMENT SMALLSERIAL、SERIAL、SERIAL
注释 # --
... ... ...

在迁移过程中,要注意两款数据库产品的差异。

迁移优势

迁移到 GreatSQL 有以下优势:

  • 高可用

针对 MGR 进行了大量改进和提升工作,支持 地理标签、仲裁节点、读写动态 VIP、快速单主模式、智能选主 等特性,并针对 流控算法、事务认证队列清理算法、节点加入&退出机制、recovery机制 等多个 MGR 底层工作机制算法进行深度优化,进一步提升优化了 MGR 的高可用保障及性能稳定性。

  • 高性能

相对 MySQL 及 Percona Server For MySQL 的性能表现更稳定优异,支持 Rapid 引擎、事务无锁化、并行LOAD DATA、异步删除大表、线程池、非阻塞式DDL、NUMA 亲和调度优化 等特性,在 TPC-C 测试中相对 MySQL 性能提升超过 30%,在 TPC-H 测试中的性能表现是 MySQL 的十几倍甚至上百倍。

  • 高兼容

GreatSQL 实现 100% 完全兼容 MySQL 及 Percona Server For MySQL 用法,支持大多数常见 Oracle 用法,包括 数据类型兼容、函数兼容、SQL 语法兼容、存储程序兼容 等众多兼容扩展用法。

  • 高安全

GreatSQL 支持逻辑备份加密、CLONE 备份加密、审计、表空间国密加密、敏感数据脱敏等多个安全提升特性,进一步保障业务数据安全,更适用于金融级应用场景。

迁移准备

业务需求分析

评估哪些业务需要迁移,以及迁移的影响。先明确迁移的范围,需要知道哪些业务系统和服务会受到影响,可以根据优先级进行迁移。了解数据库直接交互的应用程序、服务、脚本等,分析这些依赖关系,有助于制定迁移计划,和减少对业务的影响。同时也要评估迁移带来的风险,比如数据丢失、数据同步延迟、业务中断等。

兼容评估

评估 PostgreSQL 和 GreatSQL 之间的兼容性,包括语法、功能、数据类型、索引等。PostgreSQL 和 GreatSQL 在 SQL 语法和功能上存在一些差异,应特别注意。

在迁移之前,一定要先了解 PostgreSQL 和 GreatSQL 之间的区别:

备份和恢复

在迁移前确保 PostgreSQL 数据库的备份和恢复机制完善。例如做一次全量备份,在迁移之前,首先进行完整的数据库备份(例如使用 pg_dump),以确保在迁移过程中遇到问题时可以快速恢复。可以选择基于文件系统的快照备份或基于逻辑备份的 pg_dump,并将备份数据存储在安全位置。

测试环境搭建

安装 PostgreSQL 并生成测试数据

PostgreSQL 版本为 15.8

$ psql --version
psql (PostgreSQL) 15.8 (Debian 15.8-0+deb12u1)

迁移库 pg_to_greatsql 库下的 users 表

pg_to_greatsql-# \d Users
                                          数据表 "public.users"
      栏位       |            类型             | 校对规则 |  可空的  |               预设                
-----------------+-----------------------------+----------+----------+-----------------------------------
 id              | integer                     |          | not null | nextval('users_id_seq'::regclass)
 username        | character varying(255)      |          | not null | 
 password        | character varying(255)      |          | not null | 
 id_card         | character varying(255)      |          | not null | 
 email           | character varying(255)      |          | not null | 
 phone           | character varying(20)       |          |          | 
 address         | character varying(255)      |          |          | 
 job_title       | character varying(255)      |          |          | 
 education_level | character varying(255)      |          |          | 
 salary          | numeric(10,2)               |          |          | 
 hire_date       | date                        |          |          | 
 leave_date      | date                        |          |          | 
 remarks         | text                        |          |          | 
 status          | character varying(255)      |          |          | 
 created_at      | timestamp without time zone |          |          | 
 created_by      | character varying(255)      |          |          | 'system'::character varying
索引:
    "users_pkey" PRIMARY KEY, btree (id)
    "users_email_key" UNIQUE CONSTRAINT, btree (email)
    "users_username_key" UNIQUE CONSTRAINT, btree (username)

该 user 表的数据量为 1010000 行

pg_to_greatsql=# SELECT COUNT(*) FROM users;
  count  
---------
 1010000
(1 行记录)

安装 GreatSQL 数据库

推荐安装 GreatSQL 最新版本

迁移到 GreatSQL 数据库

表结构迁移

此时可以使用 AI 来帮助迁移,例如使用 ChatGPT 将 PostgreSQL 数据库表结构转换为 GreatSQL 数据库的表结构。

file

AI 生成完成后,需要自行检查下是否正确!

  • 自增字段:id 字段使用 AUTO_INCREMENT 代替 nextval

  • 数据类型:PostgreSQL 的 character varying 对应 GreatSQL 的 VARCHARnumeric 对应 DECIMALtext 对应 TEXTtimestamp without time zone 对应 TIMESTAMP

  • 默认值:对于 created_at 字段,使用 DEFAULT CURRENT_TIMESTAMP 设置默认值,created_by 字段的默认值保持不变。

  • 字符集:推荐使用 utf8mb4 字符集,以支持更广泛的字符

在 GreatSQL 中创建对应库,并执行由 AI 生成的 SQL 建表语句:

-- 创建 pg_to_greatsql 库
greatsql> CREATE DATABASE pg_to_greatsql;
-- 创建 users 表
greatsql> CREATE TABLE users (
    id INT NOT NULL AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    id_card VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE,
    phone VARCHAR(20),
    address VARCHAR(255),
    job_title VARCHAR(255),
    education_level VARCHAR(255),
    salary DECIMAL(10, 2),
    hire_date DATE,
    leave_date DATE,
    remarks TEXT,
    status VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    created_by VARCHAR(255) DEFAULT 'system',
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

数据迁移

方法一:pg_dump 备份

在 PostgreSQL 执行pg_dump备份

$ pg_dump --data-only --inserts --column-inserts -U postgres -d pg_to_greatsql > ./pg_to_greatsql.sql
  • --data-only:只导出数据,不包括数据库对象的定义(如表结构、索引等)。

  • --inserts:以 SQL INSERT语句的形式导出数据,而不是默认的自定义格式。这样生成的备份文件更易于阅读和编辑。

  • --column-inserts:使用带有列名的 INSERT语句形式,即INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...);这种方式在处理包含特殊字符的数据时可能更稳定,并且可以更精确地控制插入的列。

此时会生成 pg_to_greatsql.sql 文件:

$ ls -lh
总计 474M
drwxr-xr-x 3 postgres postgres 4.0K  7月23日 10:49 15
-rw-r--r-- 1 postgres postgres 474M 10月21日 15:36 pg_to_greatsql.sql

去除无用信息

此时还不能将这份 SQL 文件直接导入到 GreatSQL 中。因为上面有介绍,两款数据库的对象层次结构不同。打开 pg_to_greatsql.sql 文件:

-- 语句中有 public. 需要去除
INSERT INTO public.users (id, username, password, id_card, email, phone, address, job_title, education_level, salary, hire_date, leave_date, remarks, status, created_at, created_by) VALUES (1010000, '527d66e0a6cdb128d44fc45', '10cccade4c7c35d553cd23e48b5facd1', '435078200404227108', 'b8a5b05af990ff4bdc9ccdc@qq.com', '18059437765', '讗慹簪瞠珒鸚鼜瘔狹覰', 'C++', '博士', 23592.00, '2020-07-04', '2020-12-29', '0e3801d3e64be7c38d93cb5', '离职', '2023-06-20 22:42:39', 'system');

可以看到 INSERT 语句表前面有 public. 关键词,需要将这个关键词去掉:

$ sed 's/INSERT INTO public\./INSERT INTO /g' pg_to_greatsql.sql > modified_pg_to_greatsql.sql

同时还有一些关于 PostgreSQL 参数的设置,需要去掉:

# 这些要去掉,否则导入不了 GreatSQL
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

my.cnf 参数可以选择 GreatSQL 推荐的参数模板设置:

当然有些参数,例如例子中的 lock_timeout在 PostgreSQL 中是代表锁超时,在 GreatSQL 中锁超时参数是 lock_wait_timeout,若有需要可自行查找对应在 GreatSQL 的参数。

pg_dump 导入 GreatSQL

接下来就可以直接将这份 SQL 文件导入到 GreatSQL 数据库中:

$ mysql -u root -p pg_to_greatsql < modified_pg_to_greatsql.sql

greatsql> SELECT COUNT(*) FROM pg_to_greatsql.users;
+----------+
| count(*) |
+----------+
|  1010000 |
+----------+
1 row in set (1.06 sec)

数据量如果很大,该方法导入会特别慢

方法二:COPY 导出数据

使用 INSERT 的方法导入,会比较慢,此时可以用 COPY 的方法导出表数据,在配合 GreatSQL 的并行 Load Data 特性,可以使迁移更加迅速。

使用 COPY 导出数据:

pg_to_greatsql=# COPY users TO '/var/lib/postgresql/output_file.txt' WITH (FORMAT TEXT);
COPY 1010000

COPY 导入 GreatSQL

使用 GreatSQL 中的并行 Load Data 特性:

greatsql> LOAD /*+ SET_VAR(gdb_parallel_load = ON) SET_VAR(gdb_parallel_load_chunk_size = 65536) SET_VAR(gdb_parallel_load_workers = 16) */ DATA INFILE '/var/lib/mysql/output_file.txt' INTO TABLE pg_to_greatsql.users;
Query OK, 1010000 rows affected (4 min 25.87 sec)
Records: 1010000  Deleted: 0  Skipped: 0  Warnings: 0

greatsql> SELECT COUNT(*) FROM pg_to_greatsql.users;
+----------+
| count(*) |
+----------+
|  1010000 |
+----------+
1 row in set (1.04 sec)

到此迁移完成,下篇将介绍使用 pg2mysql 工具迁移:)


Enjoy GreatSQL

标签:PostgreSQL,AI,GreatSQL,greatsql,pg,迁移,255
From: https://www.cnblogs.com/greatsql/p/18680834

相关文章

  • 【AIGC-ChatGPT提示词】心灵笔记:打造温暖治愈的职场年终回顾系统
    感谢信任,专栏出现0-1的历史突破❤️❤️好了,开始今天的内容今天继续回馈大家,最近都是可以在自媒体上使用的提示词。提示词在最下方引言在每年岁末时分,我们都期待着对过去一年进行总结与回顾。然而,传统的工作总结往往过于注重数据和绩效,容易忽视个人的情感体验和内心成长......
  • Cursor从小白到高手-.cursorignore 为什么如此重要?-一期教学-AI编程神器,让你一个顶十
    0.前言父文章导航(配合更佳):Cursor从小白到高手-下载及基本配置子文章或相关文章导航(不是目录导航哦~):如此重要的CursorRules配置,你不会不知道吧!!不配置.cursorignore,cursor性能毁一半!!!Docs讲解(计划中~~)Chat&Composer(计划中~~~)文章持续迭代中,敬请期待~~~~~Cursor......
  • AIGC视频生成明星——Emu Video模型
    大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Meta的视频生成模型EmuVideo,作为Meta发布的第二款视频生成模型,在视频生成领域发挥关键作用。......
  • AI应用实战课学习总结(6)分类算法分析实战
    大家好,我是Edison。最近入坑黄佳老师的《AI应用实战课》,记录下我的学习之旅,也算是总结回顾。今天是我们的第6站,一起了解下分类算法基本概念 以及通过分类算法辅助疾病诊断的案例。分类问题介绍分类算法是用来预测离散标签的算法,它可以预测输入的数据标签属于哪一个类别。举......
  • 聊天也能写程序?10 分钟让 AI 帮你编写出文本格式转换的程序
    聊天也能写程序?10 分钟让 AI 帮你编写出文本格式转换的程序今天,我要和大家分享:只需跟AI聊聊天,10分钟就能搞定文本格式转换的程序!在 家长必看!1小时搞定RAZ英文绘本英文提取! 文章里提到,我通过AI实现语音转文字,但得到的文本格式只有一大段文字。我想要将这......
  • 海外抖音技术深度解析:算法、AI与全球化的挑战
    引言2025年1月19日,在美国宣布暂停服务,这一事件引发了全球用户的广泛关注。作为全球最受欢迎的短视频平台之一,其成功离不开其强大的技术支撑,尤其是其个性化推荐算法和AI驱动的创作工具。然而,随着全球市场环境的变化,它面临的技术与运营挑战也日益凸显。本文将深入分析其技术核心......
  • AI能否取代编程人员?未来社会影响……
    AI越来越聪明了,人类积累了几千年的知识,AI一下子就学会了。AI吸收了优秀人类的所有精华知识和优秀创作,然后它以假乱真了。未来的人类将会过上一段舒服的日子,AI会把人类的所有幻想都满足,然后呢?记住,乐极生悲。就像你把公司交给一个优秀的人去管理,有一天你会发现,你被他炒鱿鱼了......
  • 震撼!借助模版或 AI,轻松快速创建自己的智能体,智能体的多种创建方式
    1、通过模板搭建智能体模板是扣子平台中公开配置的智能体、工作流、图像流等资源。可以复制一份和模板配置完全一样的智能体,然后把复制的智能体改造为更适合自己的应用。操作也非常简单,大家和涛涛老师一起看下吧。1.1 单击此处访问扣子模板库。1.2注意区分模版的类型和是......
  • Unraid 安装 WindowsServer2019 及 NGINX、PHP、Python 环境
    一、安装虚拟机使用Unraid安装。项目值初始内存:4096MB最大值内存:6144MB机器:i440fx-7.2BIOS:OVMF启用USB启动引导:NoHyper-V:是USB控制器:2.0(EHCI)操作系统安装ISO:windows_server_2019.iso操作系统安装光盘总线:......
  • WLC8540 failed to find ifIndex!
    今天遇到一个WLC的问题,在这里记录一下,进行了一些分析和判断,但不知道根本问题是什么,望有经验的伙伴儿更新补充一下,谢谢。Hardware:AIR-CT8540-K9Software:8.3.150Deployment:standalone故障现象:在WLC的msglog中能够看到如下的报错信息,伴随的现象是注册的AP都掉线了!!!*broffu_Soc......