
086、案例六:数据库迁移——从 MySQL 到 PostgreSQL 的 SQL 转换上周五凌晨两点,我盯着屏幕上那条“ERROR: syntax error at or near “`””的报错,咖啡杯底已经干了三小时。客户要求把一套运行了三年的电商系统从 MySQL 5.7 迁移到 PostgreSQL 14,理由是 PG 的 JSONB 和地理空间查询更适合他们新上的物流模块。我本以为只是改改连接字符串,结果第一个 SQL 文件就炸了——MySQL 里用惯了反引号包裹字段名,PG 根本不认这玩意儿。迁移前的“雷区”扫描先别急着写脚本。我习惯先跑一遍mysqldump --compatible=postgresql看看能自动处理多少,但说实话,这个参数只能解决最基础的语法差异。真正要命的是那些藏在业务逻辑里的隐式转换和函数差异。拿我们这次迁移的订单表举例,MySQL 里有个字段create_time用的是DATETIME类型,默认值写的是CURRENT_TIMESTAMP。PG 里对应的应该是TIMESTAMP加DEFAULT NOW()。别小看这个区别,如果你直接复制 DDL,PG 会告诉你CURRENT_TIMESTAMP是个未定义的函数——它确实有,但写法是CURRENT_TIMESTAMP