我正在考虑从 MySQL 切换到 PostgreSQL。
您在使用 PostgreSQL 时有哪些提示、技巧和陷阱?
MySQLer 应该注意什么?
注意 - 我不认为这是重复的。特别是答案的类型非常不同,这里的响应有更多的实现细节,这就是我正在寻找的
我正在考虑从 MySQL 切换到 PostgreSQL。
您在使用 PostgreSQL 时有哪些提示、技巧和陷阱?
MySQLer 应该注意什么?
注意 - 我不认为这是重复的。特别是答案的类型非常不同,这里的响应有更多的实现细节,这就是我正在寻找的
我自己刚刚经历过,好吧,我仍然......
INSERT IGNORE
和REPLACE
LOAD DATA INFILE
(COPY
很接近,但不够接近)autoincrement
为SERIAL
INNER JOIN
没有ON
子句的情况不会发生,使用CROSS JOIN
等COUNT(*)
可能会很慢interval
vs. Postgres interval
(时间间隔)AS
CALL proc();
;重写proc()
为函数和SELECT proc();
.这将是一项艰巨的任务,因为您必须测试整个代码库——每一个查询,任何地方,
在操作上,您需要查看:
在考虑采取这样的举措之前,您肯定必须进行大量的性能测试。
对于大多数重要的应用程序来说,这些成本使得迁移到不同的数据库过于昂贵。非常仔细地考虑与执行上述所有操作的巨大成本相比的好处。
如果您在一个非平凡的应用程序中花费不到三个月的时间,我会感到惊讶,在此期间您将无法继续进行常规开发。
您可以尝试包含最常见问题的PostgreSQL 陷阱。一般来说,PostgreSQL 文档也很不错,所以也请把它放在枕头底下。
此外,在 pgsql wiki 上从 MySQL 转换为 PostgreSQL 。
我发现这个脚本将连接到你的 MySQL 数据库和你的 PostgreSQL 数据库,并且只是传输内容。它对我来说就像一个魅力。
https://github.com/philipsoutham/py-mysql2pgsql
安装者
$ pip install py-mysql2pgsql
跑
$ py-mysql2pgsql
在任何文件夹中,它将为您创建一个模板设置文件(mysql2pgsql.yml),您可以在其中编辑和输入数据库的详细信息。
我必须安装 argparse 才能工作。
$ pip install argparse
填写完数据库详细信息后,再次运行即可
$ py-mysql2pgsql
在与设置文件相同的文件夹中,然后,您就完成了。它没有在屏幕上打印任何内容,但是之后我的数据库被完全复制了。
在转换之前,通过使用以下命令启动服务器,将 MySQL 设置为 ANSI-strictness:--transaction-isolation=SERIALIZABLE --sql-mode=ANSI
确保您没有使用 MyIsam 表。
MySQL 允许大量不应该的转换;pg 将需要演员表。
您存储的过程、函数和触发器必须重新编写。pg 为您提供了这些语言的选择,但您必须安装这些语言;它不像 MySQL 那样用户友好。
pg 将只允许在一个选择列表中的列在 group by 或聚合;如果这样做,MySQL 将通过选择组中的第一个值来作弊。
MySQL 增加了一堆扩展:不等于运算符可以!=
像 C 中一样,它允许 '&&' 作为 'and'、'||' 的同义词 对于“或”等。特别是,pg 使用“||” 表示字符串连接。
基本上,pg 是非常严格的 ANSI,MySQL 不是。我强烈建议在转换为 pg 之前让您的 MySQL 尽可能严格地遵守 ANSI,然后在运行应用程序时检查是否有任何警告。
除了移动数据库结构,您无法避免手动调整......
最可靠的数据传输方法(逐表,前提是结构相同):
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。