从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转换器 由智能转换器提供。