电脑

验证PostgreSQL到MySQL的迁移

从PostgreSQL迁移到MySQL的最重要阶段是验证目标数据库。本文探讨了以下数据库对象的验证过程:

  • 表定义
  • 数据
  • 指标
  • 外键
  • 观看次数

表定义

要探索PostgreSQL中的表定义,请运行SQL语句 \ d table_name

表定义可以通过两种方式在MySQL中获得:

  • 标准的mysql控制台客户端通过运行SQL语句公开它 DESC表名
  • phpMyAdmin在以下位置的左窗格中显示突出显示的表的相关信息‘Structure’ tab

如果每列的类型,大小和默认值与结果表相同,则PostgreSQL表将正确迁移到MySQL。适当的类型映射如下:

PostgreSQL的 的MySQL
阵列 长文本
比金特 比金特
大系列 比金特 auto_increment
布兰 比特
拜耳 龙宝
CHAR(n),CHARACTER(n) CHAR(n),CHARACTER(n)
CIDR VARCHAR(43)
日期 日期
十进制(p,s),十进制(p,s) 十进制(p,s),十进制(p,s)
双精度
浮点数(p) 浮点数(p)
互联网 VARCHAR(43)
整数,整数 INT
间隔 时间
JSON格式 长文本
线 划线
十进制(19,2)
数值(p,s) 十进制(p,s)
真实 浮动
系列 诚信
SMALLINT SMALLINT
文本 长文本
时间(p) 时间(p)
时间戳 约会时间
载体 长文本
查询 长文本
UUID VARCHAR(36)
VARCHAR(n) VARCHAR(n)
XML格式 长文本

数据

验证迁移的数据应该从验证PostgreSQL和MySQL表具有相同的行数开始。两种数据库管理系统都允许通过以下查询提取表行数:

从表名中选择COUNT(*)

可以通过手动比较Postgres和MySQL表的随机片段来完成进一步的验证。 PostgreSQL的允许从指定的偏移量开始提取数据片段,如下所示:

选择 * 从 table_name LIMIT_number_of_records条记录OFFSET start_record

的MySQL出于相同的目的提供了类似的SELECT查询:

选择 * 从 table_name LIMIT起始记录,number_of_records

指标

如果索引在目标数据库中具有与原始数据库相同的列列表和属性,则可以正确迁移。 PostgreSQL的在命令生成的表定义的底部显示有关索引的信息: \ d table_name

的MySQL通过以下选项之一列出索引:

  • 通过SQL语句 从table_name显示索引;
  • 在phpMyAdmin中,突出显示左窗格中的表,转到‘Structure’标签,所有索引将在表结构后立即列出

外键

外键正确迁移的标准与索引相同。 

PostgreSQL的从服务表中提取外键数据“information_schema” using the query:

选择

    tc.constraint_name,tc.table_name,kcu.column_name, 

    ccu.table_name AS外表名称,

    ccu.column_name AS foreign_column_name 

从 

    information_schema.table_constraints AS tc 

    加入information_schema.key_column_usage AS kcu

      开启tc.constraint_name = kcu.constraint_name

    加入information_schema.constraint_column_usage AS ccu

      开启ccu.constraint_name = tc.constraint_name

其中约束条件类型=‘FOREIGN KEY’ AND tc.table_name=’table_name’;

的MySQL允许使用以下选项之一提取外键数据:

  • 通过SQL语句 显示创建表`表名`
  • 在phpMyAdmin中,突出显示左窗格中的表,转到‘Structure’ tab and click ‘Relations view’表格定义下方的链接

观看次数

验证迁移后的视图需要考虑到这两个DBMS的SQL方言之间的差异,比较PostgreSQL和MySQL中每个视图的SELECT语句。 

PostgreSQL的使用查询公开数据库中所有视图的列表:

从INFORMATION_SCHEMA.views中选择table_name

的MySQL可以通过查询执行相同的操作:

在数据库名称中显示完整的表,其中的表类型类似于‘VIEW’;

PostgreSQL的和MySQL中的查询语法相似,但不相等。 PostgreSQL的对定界标识符使用双引号,而MySQL为相同目的使用反引号。 

另外,有必要将MySQL中缺少的PostgreSQL函数和运算符转换为适当的等效项:

  • 字符串串联运算符 || 必须由MySQL函数代替 康卡特
  • 所有PostgreSQL强制转换运算符,例如$ 1 :: int,都必须转换为MySQL CAST($ 1 AS $ type) 来电
  • PostgreSQL的功能 TO_CHAR($ date,$ format) 必须替换为MySQL等效项 日期_FORMAT($ date,$ format)。格式说明符的翻译如下:
PostgreSQL的 的MySQL 描述
YY YY %Y 4位数的年份 
YY %y 2位数的年份
周一 %b 缩写的月份,例如一月
%M 月名称,例如一月二月
MM %m 月数(1– 12)
HH或HH12 %H 小时(1 – 12)
HH24 %H 小时(0 – 23)
MI %一世 分钟(0– 59)
SS %s 秒(0– 59)
  • 所有发生的 CHR($ a) 必须替换为 CHAR($ a)
  • PostgreSQL的功能 随机() 转换成MySQL 兰德()

为了保证正确的数据库迁移,使用专用软件(例如, PostgreSQL的到MySQL转换器 由智能转换器提供。 

关于作者

头像

方达丽莎·索福

方达丽莎·索福拥有德里大学的计算机科学硕士学位,目前在业余时间阅读和学习各种主题,同时撰写博客。除了写博客,她还喜欢唱歌,做饭,尝试各种食物,旅行和露营。在评论部分与Fondaliza分享您的意见和建议。

在这里订阅

Join the list of our 42,000+ 订阅者,可以直接在其收件箱中收到我们的最新文章,提示/技巧和竞赛详细信息。免费。

广告

享受免费的电子邮件更新