使用mysql 将数据迁移到pgsql
1. 直接使用在线的脚本转化器 sqllines
online 地址
优点就是快速敏捷,在线编辑;缺点在于,有的转换可能不准,只有学习的意义.且在线工具如果粘贴的文本过大会很卡 且翻译不出来(可以下载它的客户端工具进行操作)
2. 使用navicate在线迁移
这种搞法就是适合有源库,且表的个数超过了100(比较多),直接点开客户端工具中的数据迁移
这里的操作因人而异
值得要注意的一点就是navicate的同步过程中会有一些问题,我遇到的:
1.全部的索引直接失败,报错找不到对应的表
2.转换的对象的大小写需要设置一下(懂的都懂)
3.转换的建表语句中的默认值直接没了?
4.外键约束中的delete cascade 直接变成了 delete no action
所以我建议如果遇到这种情况,直接先只同步结构和数据
完成以后再单独同步索引和(外键)约束 和自增序列
2.1 获取主键自增序列
SELECT
concat('create sequence ',a.name,'_seq',' INCREMENT 1 START 1 NO MINVALUE NO MAXVALUE;')
FROM
(SELECT table_name as name FROM
information_schema.columns WHERE
table_schema = 'your_schema_name' -- schema的名称
and COLUMN_NAME = 'id' -- 字段为id
)a;
2.2 获取索引的创建
SELECT
CONCAT('CREATE ',
if(a.non_unique = 1,'INDEX ','UNIQUE INDEX '),
a.INDEX_NAME,
' ON ',
a.TABLE_NAME,
' using btree',
' (',
a.index_column,
');'
)
FROM
(select TABLE_NAME, non_unique,INDEX_NAME, GROUP_CONCAT(COLUMN_NAME) as INDEX_COLUMN
from
information_schema.statistics
where
table_schema='your_schema_name' -- 数据库名
AND index_name 'PRIMARY' -- 将主键去掉
GROUP BY TABLE_NAME, INDEX_NAME,non_unique) a
2.3 外键约束
SELECT DISTINCT
CONCAT('ALTER TABLE ', kcu.table_name, ' ADD CONSTRAINT ', tc.constraint_name,'_', kcu.column_name, ' FOREIGN KEY (', kcu.column_name, ') REFERENCES ', kcu.referenced_table_name, '(', kcu.referenced_column_name, ');') AS create_statement
FROM
information_schema.key_column_usage kcu
JOIN information_schema.table_constraints tc ON kcu.constraint_name = tc.constraint_name
WHERE
kcu.referenced_table_name IS NOT NULL
AND tc.constraint_schema = 'your_schema_name'
AND tc.constraint_type != 'PRIMARY KEY'
AND tc.constraint_name NOT IN (
SELECT
constraint_name
FROM
information_schema.referential_constraints
WHERE
constraint_schema = 'your_schema_name'
GROUP BY
constraint_name
HAVING
COUNT(*) > 1
);
3 使用工具pgload进行在线同步
这里就不赘述pgload的安装过程,需要准备的先决条件即是:两个需要数据迁移的库的账号信息(ip 端口 username passowrd 最好是管理员账户 否则在创建一些对象的时候可能会失败)
准备好pgload.load配置文件(这里有个坑密码不能有特殊字符如@等 否则则会一直解析失败 不知道有没有遇到这类情况的大佬教教我咋处理)
LOAD DATABASE
FROM mysql://root:root@192.168.124.11:3306/bam
INTO pgsql://bim6:Bamboocloud1234@10.0.0.200:8887/postgres
WITH include drop, create tables, create indexes, reset no sequences,
workers = 8, concurrency = 1,
multiple readers per thread, rows per range = 50000
CAST type timestamp to timestamp drop default drop not null using zero-dates-to-null,
type datetime to timestamp drop default drop not null using zero-dates-to-null,
type varchar when(= 1 precision) to "boolean" drop typemod keep default keep not null
值得要说的就是对于一些字段的迁移如mysql中的timestamp 迁移到pg 则会变成 timestamptz 可能会对程序造成一些影响,这里使用了CAST进行类型转换.
一些其他的语法配置可参考[mysql迁移到Pg 的配置相关]
(https://pgloader.readthedocs.io/en/latest/ref/mysql.html#usin…)
参考如下
- 使用PGLoader将MySQL数据库迁移到PostgreSQL
- pg中文文档
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
配置 1)启用dhcp 系统视图模式:dhcp enable 2)配置dhcpv6地址池 dhcpv6 pool pool1 address prefix 2023:10::/64 excluded-address 2023:10::1 # 3)地址池应用于接…