我在考虑从MySQL转换到PostgreSQL。
对于使用PostgreSQL,你有什么技巧、诀窍和需要注意的地方?
MySQL用户应该注意什么?
另请参阅:PostgreSQL与MySQL有何不同?
另请参阅:从MySQL迁移到PostgreSQL
注意 - 我不认为这是重复的。特别是答案类型非常不同,并且这里的回复有更多的实现细节,这正是我想要的。
我在考虑从MySQL转换到PostgreSQL。
对于使用PostgreSQL,你有什么技巧、诀窍和需要注意的地方?
MySQL用户应该注意什么?
另请参阅:PostgreSQL与MySQL有何不同?
另请参阅:从MySQL迁移到PostgreSQL
注意 - 我不认为这是重复的。特别是答案类型非常不同,并且这里的回复有更多的实现细节,这正是我想要的。
我刚刚自己经历了这个问题,目前仍在进行中...
INSERT IGNORE
和REPLACE
LOAD DATA INFILE
(COPY
接近,但不足以替代)autoincrement
更改为SERIAL
INNER JOIN
没有ON
子句是不可能发生的,使用CROSS JOIN
或类似语法COUNT(*)
可能非常慢interval
与Postgres中的interval
(用于时间间隔)不同AS
CALL proc();
语法;将proc()
重写为函数,并使用SELECT proc();
。$ pip install py-mysql2pgsql
运行
$ py-mysql2pgsql
在任意文件夹中,它会为您创建一个模板设置文件(mysql2pgsql.yml),您可以在其中编辑并输入数据库的详细信息。
我必须安装argparse才能使其正常工作。
$ pip install argparse
$ py-mysql2pgsql
在与设置文件相同的文件夹中,完成这个操作非常简单。没有任何内容显示在屏幕上,但是我的数据库之后被完全复制了。
除了移动数据库结构,你无法避免手动调整之外...
最可靠的方法是逐个表格地传输数据(前提是结构相同):
mysql --default-character-set=utf8 -e "SELECT * FROM mytable" > mytable.txt
psql
\copy mytable from '/path/to/mytable.txt' WITH NULL AS 'NULL';
最近一直在尝试其他方法(比如使用带有大量选项的mysqldump + sed等),但没有任何一个方法像这个那样好用。
这种方法还允许在结构改变时具有一定的灵活性 - 只需编写适当的SELECT语句即可。