如何把一个php网站的Postgresql数据库向MySQL迁移?

时间:2022-05-22 04:52:27
应客户要求,要做如题的工作,应该怎么去做呢?做的过程中应该注意些什么?
大家能不能把自己的经验说一下,而不是发一个很长的网页链接,小弟顿首拜谢。


先举例说下我目前的疑问:
1。Postgresql从来没用过,数据是用.sql或者.csv格式的文件导出以后,直接导入mysql就可以了吗?
2。php里面是不是只要把pg_开头的函数换成mysql对应函数就可以了?有什么需要特别注意的吗?(比较常见的)

20 个解决方案

#1


1、不是,美容师两个不同的数据库,支持的字段类型、长度等等都有差别,只能将数据导入,
主键、外键、约束、SP、TRIGGER等等要重新建立;
2、不是,要按照MYSQL的语法格式、函数等等重新建立。

#2


引用
1。Postgresql从来没用过,数据是用.sql或者.csv格式的文件导出以后,直接导入mysql就可以了吗?
你可以导出.sql 文件,然后你需要手工的进行调整,因为两个数据库上有许多细节上的语法并不相同。

一般是先把CREATE TABLE 语句导出,然后在MYSQL执行创建。之后再导数据。 最后去加存储过程,触发器。

#3


引用
2。php里面是不是只要把pg_开头的函数换成mysql对应函数就可以了?有什么需要特别注意的吗?(比较常见的)
这一点上倒是容易,但做起比较繁琐。 基本上就是按pg_的函数改成 mysql_的函数。

#4


引用 1 楼 wwwwa 的回复:
1、不是,美容师两个不同的数据库,支持的字段类型、长度等等都有差别,只能将数据导入,
主键、外键、约束、SP、TRIGGER等等要重新建立;
2、不是,要按照MYSQL的语法格式、函数等等重新建立。

多谢,比我想象的复杂多了。。
能不能所以说具体做法,好像百度到的都是mysql到PostgreSQL的做法

#5


引用 2 楼 acmain_chm 的回复:
引用1。Postgresql从来没用过,数据是用.sql或者.csv格式的文件导出以后,直接导入mysql就可以了吗?你可以导出.sql 文件,然后你需要手工的进行调整,因为两个数据库上有许多细节上的语法并不相同。

一般是先把CREATE TABLE 语句导出,然后在MYSQL执行创建。之后再导数据。 最后去加存储过程,触发器。

第二点我大概有数,应该是函数里面的参数逐个的去调整。

第一点有点不知道怎么办才好,因为Postgresql从来没用过。
现在手头还没有.sql文件,只有一些数据库设计时的create语句。

#6


cd C:\PostgreSQL\bin\ 回车
pg_dump -D -h localhost -U postgres -Z -b MyDB> D:\DataBackUp\pgDB.bak 回车

先将表中数据导出来再修改

#7


现在表里面的数据还没有拿到,网站的php源码有了,想先把数据库建起来弄一点假数据进去试一下。

#8


引用
现在手头还没有.sql文件,只有一些数据库设计时的create语句。


那就直接执行这些SQL文件,然后把数据从PSQL中导出,可以导成CSV文件,然后再导入。

不过要小心你的  数据库设计时的create语句 是否和你的数据库中实际情况一致。比如有人改了数据库但并没有去做文档的更新。

#9


引用 8 楼 acmain_chm 的回复:
引用现在手头还没有.sql文件,只有一些数据库设计时的create语句。

那就直接执行这些SQL文件,然后把数据从PSQL中导出,可以导成CSV文件,然后再导入。

不过要小心你的 数据库设计时的create语句 是否和你的数据库中实际情况一致。比如有人改了数据库但并没有去做文档的更新。

我在执行这些create语句的时候报错了,不知道该着怎么解决。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USING INDEX TABLESPACE INDX LOGGING PCTFREE 10
STORAGE(INITIAL 512K NE' at line 30

#10



CREATE TABLE clinic_list
(
......
......


USING INDEX TABLESPACE INDX LOGGING PCTFREE 10
STORAGE(INITIAL 512K NEXT 128K MINEXTENTS 1 MAXEXTENTS UNLIMITED) 
)
TABLESPACE HELIOS LOGGING PCTFREE 10
STORAGE(INITIAL 5M NEXT 128K MINEXTENTS 1 MAXEXTENTS UNLIMITED)  MONITORING 
;

COMMENT ON TABLE clinic_list IS 'dental_clinic_table'
;

出错的地方应该是在这,中间字段的定义省略了。

#11


MYSQL不支持这些语法,看看MYSQL的HELP吧,直接建立索引

create index tt on t1

#12


引用 11 楼 wwwwa 的回复:
MYSQL不支持这些语法,看看MYSQL的HELP吧,直接建立索引

create index tt on t1

平时用mysql建立索引外键什么的都是用navicat,都没写过这些语句,我杯具了。

#13


呵呵,转换数据库是比较麻烦的事件,要求两种数据库都要熟悉,先看看 MYSQL的HELP吧

#14


引用 13 楼 wwwwa 的回复:
呵呵,转换数据库是比较麻烦的事件,要求两种数据库都要熟悉,先看看 MYSQL的HELP吧

是啊,比我想象的复杂多了。
话说那个PostgreSQL的sql语句都没看出来是把哪个字段作为索引啊,默认主键做索引吗?

#15


默认主键做索引吗?
一般是这样

#16


如何把一个php网站的Postgresql数据库向MySQL迁移?

#17


引用 15 楼 wwwwa 的回复:
默认主键做索引吗?
一般是这样

USING INDEX TABLESPACE INDX LOGGING PCTFREE 10
因为在这一句里面没看到字段名啊。

#18


MYSQL并不支持建表时指明表空间,其实MYSQL也没有明确的表空间的定义。

所以
    USING INDEX TABLESPACE INDX LOGGING PCTFREE 10                                
    STORAGE(INITIAL 512K NEXT 128K MINEXTENTS 1 MAXEXTENTS UNLIMITED)          
这两句删除。

#19


建议你可以先花一天的时间看一下MYSQL的手册。

MySQL官方文档  http://dev.mysql.com/doc/refman/5.1/zh/index.html

#20


多谢各位大神耐心解答,我再去好好学习一下。

#1


1、不是,美容师两个不同的数据库,支持的字段类型、长度等等都有差别,只能将数据导入,
主键、外键、约束、SP、TRIGGER等等要重新建立;
2、不是,要按照MYSQL的语法格式、函数等等重新建立。

#2


引用
1。Postgresql从来没用过,数据是用.sql或者.csv格式的文件导出以后,直接导入mysql就可以了吗?
你可以导出.sql 文件,然后你需要手工的进行调整,因为两个数据库上有许多细节上的语法并不相同。

一般是先把CREATE TABLE 语句导出,然后在MYSQL执行创建。之后再导数据。 最后去加存储过程,触发器。

#3


引用
2。php里面是不是只要把pg_开头的函数换成mysql对应函数就可以了?有什么需要特别注意的吗?(比较常见的)
这一点上倒是容易,但做起比较繁琐。 基本上就是按pg_的函数改成 mysql_的函数。

#4


引用 1 楼 wwwwa 的回复:
1、不是,美容师两个不同的数据库,支持的字段类型、长度等等都有差别,只能将数据导入,
主键、外键、约束、SP、TRIGGER等等要重新建立;
2、不是,要按照MYSQL的语法格式、函数等等重新建立。

多谢,比我想象的复杂多了。。
能不能所以说具体做法,好像百度到的都是mysql到PostgreSQL的做法

#5


引用 2 楼 acmain_chm 的回复:
引用1。Postgresql从来没用过,数据是用.sql或者.csv格式的文件导出以后,直接导入mysql就可以了吗?你可以导出.sql 文件,然后你需要手工的进行调整,因为两个数据库上有许多细节上的语法并不相同。

一般是先把CREATE TABLE 语句导出,然后在MYSQL执行创建。之后再导数据。 最后去加存储过程,触发器。

第二点我大概有数,应该是函数里面的参数逐个的去调整。

第一点有点不知道怎么办才好,因为Postgresql从来没用过。
现在手头还没有.sql文件,只有一些数据库设计时的create语句。

#6


cd C:\PostgreSQL\bin\ 回车
pg_dump -D -h localhost -U postgres -Z -b MyDB> D:\DataBackUp\pgDB.bak 回车

先将表中数据导出来再修改

#7


现在表里面的数据还没有拿到,网站的php源码有了,想先把数据库建起来弄一点假数据进去试一下。

#8


引用
现在手头还没有.sql文件,只有一些数据库设计时的create语句。


那就直接执行这些SQL文件,然后把数据从PSQL中导出,可以导成CSV文件,然后再导入。

不过要小心你的  数据库设计时的create语句 是否和你的数据库中实际情况一致。比如有人改了数据库但并没有去做文档的更新。

#9


引用 8 楼 acmain_chm 的回复:
引用现在手头还没有.sql文件,只有一些数据库设计时的create语句。

那就直接执行这些SQL文件,然后把数据从PSQL中导出,可以导成CSV文件,然后再导入。

不过要小心你的 数据库设计时的create语句 是否和你的数据库中实际情况一致。比如有人改了数据库但并没有去做文档的更新。

我在执行这些create语句的时候报错了,不知道该着怎么解决。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USING INDEX TABLESPACE INDX LOGGING PCTFREE 10
STORAGE(INITIAL 512K NE' at line 30

#10



CREATE TABLE clinic_list
(
......
......


USING INDEX TABLESPACE INDX LOGGING PCTFREE 10
STORAGE(INITIAL 512K NEXT 128K MINEXTENTS 1 MAXEXTENTS UNLIMITED) 
)
TABLESPACE HELIOS LOGGING PCTFREE 10
STORAGE(INITIAL 5M NEXT 128K MINEXTENTS 1 MAXEXTENTS UNLIMITED)  MONITORING 
;

COMMENT ON TABLE clinic_list IS 'dental_clinic_table'
;

出错的地方应该是在这,中间字段的定义省略了。

#11


MYSQL不支持这些语法,看看MYSQL的HELP吧,直接建立索引

create index tt on t1

#12


引用 11 楼 wwwwa 的回复:
MYSQL不支持这些语法,看看MYSQL的HELP吧,直接建立索引

create index tt on t1

平时用mysql建立索引外键什么的都是用navicat,都没写过这些语句,我杯具了。

#13


呵呵,转换数据库是比较麻烦的事件,要求两种数据库都要熟悉,先看看 MYSQL的HELP吧

#14


引用 13 楼 wwwwa 的回复:
呵呵,转换数据库是比较麻烦的事件,要求两种数据库都要熟悉,先看看 MYSQL的HELP吧

是啊,比我想象的复杂多了。
话说那个PostgreSQL的sql语句都没看出来是把哪个字段作为索引啊,默认主键做索引吗?

#15


默认主键做索引吗?
一般是这样

#16


如何把一个php网站的Postgresql数据库向MySQL迁移?

#17


引用 15 楼 wwwwa 的回复:
默认主键做索引吗?
一般是这样

USING INDEX TABLESPACE INDX LOGGING PCTFREE 10
因为在这一句里面没看到字段名啊。

#18


MYSQL并不支持建表时指明表空间,其实MYSQL也没有明确的表空间的定义。

所以
    USING INDEX TABLESPACE INDX LOGGING PCTFREE 10                                
    STORAGE(INITIAL 512K NEXT 128K MINEXTENTS 1 MAXEXTENTS UNLIMITED)          
这两句删除。

#19


建议你可以先花一天的时间看一下MYSQL的手册。

MySQL官方文档  http://dev.mysql.com/doc/refman/5.1/zh/index.html

#20


多谢各位大神耐心解答,我再去好好学习一下。

#21