mysql迁移数据和表结构到pgsql所出现的问题

前提

采用navicat,将mysql的表及数据迁入pgsql,但是自增字段及索引没有迁移过去,所以需要自己写脚本加上

–增加自增序列

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 = 'aml_payment' -- schema的名称
and COLUMN_NAME = 'id' -- 字段为id
)a;

–修改键id为自增序列

SELECT 
concat('alter table ',a.name,' alter column id set default nextval(''',a.name,'_seq'');')
FROM 
(SELECT table_name as name FROM 
information_schema.columns WHERE 
table_schema = 'aml_payment' 
and COLUMN_NAME = 'id')a;

原表数量太多,在此干脆将字段为id的表拎出来,拼接成pgsql更改自增的语法,而后在pgsql执行

添加索引

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='aml_payment' -- 数据库名
AND index_name <> 'PRIMARY' -- 将主键去掉
GROUP BY TABLE_NAME, INDEX_NAME,non_unique) a

在mysql环境下运行,而后将检索出来的内容,即pgsql增加索引的语句,在pgsql的环境下运行

要备份pgsql数据库的表结构和表数据,可以使用pg_dump命令。具体步骤如下: 1. 打开命令提示符界面,切换到数据库安装的bin目录下。 2. 输入以下命令来备份整个数据库,包括结构数据: ``` pg_dump -h localhost -p 5432 -U postgres -d 数据库名 > 备份文件路径 ``` 其中,localhost是数据库主机名,5432是数据库端口号,postgres是数据库用户名,数据库名是要备份的数据库的名称,备份文件路径是备份文件的保存路径和文件名。[1] 例如,要备份名为data的数据库,并将备份文件保存在D盘的data.bak文件中,可以使用以下命令: ``` pg_dump -h localhost -p 5432 -U postgres -d data > D:\data.bak ``` 如果只想备份指定的表(包括数据),可以使用以下命令: ``` pg_dump -h 主机名 -p 端口号 -d 数据库名 -t 表名1 -t 表名2 -U 用户名 > 备份文件路径 ``` 其中,主机名是数据库主机名,端口号是数据库端口号,数据库名是要备份的数据库的名称,表名1和表名2是要备份的表的名称,用户名是数据库用户名,备份文件路径是备份文件的保存路径和文件名。[3] 例如,要备份名为data的数据库中的表table1和table2,并将备份文件保存在/data/文件夹下的filename.sql文件中,可以使用以下命令: ``` pg_dump -h localhost -p 5432 -d data -t table1 -t table2 -U postgres > /data/filename.sql ``` 如果需要了解更多关于pgsql数据的函数和SQL操作,可以参考该链接:https://www.runoob.com/postgresql/postgresql-tutorial.html。[2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值