导入MySQL导出的SQL文件到PostgreSQL出现语法错误的解决方法
解决MariaDB导出SQL导入PostgreSQL的语法错误问题
错误原因
你遇到的问题核心是MariaDB和PostgreSQL的标识符语法不兼容:MariaDB用反引号`包裹表名、字段名,而PostgreSQL完全不识别这种符号,这直接导致了语法报错。
具体解决步骤
1. 批量替换反引号
用文本编辑器(VS Code、Notepad++都行)打开test1.sql,做全局替换:
- 如果你的表名、字段名都是合法标识符(不含特殊字符、不是PostgreSQL关键字),直接把所有
(反引号)替换为空,比如把INSERT INTOtest1(idcustomer, ...)改成INSERT INTO test1 (idcustomer, ...) - 如果标识符含特殊字符或属于PostgreSQL关键字,就把反引号替换成双引号
",比如INSERT INTO "test1" ("idcustomer", ...)
2. 处理其他潜在语法差异
除了反引号,MariaDB的SQL还有不少和PostgreSQL不兼容的地方,需要逐一修正:
- 数据类型:把
INT(11)改成INT;DATETIME换成TIMESTAMP或TIMESTAMPTZ;去掉CHARSET=utf8mb4这类MariaDB专属的字符集声明 - 自增字段:MariaDB的
AUTO_INCREMENT替换成PostgreSQL的GENERATED AS IDENTITY,比如idcustomer INT(11) NOT NULL AUTO_INCREMENT改成idcustomer INT NOT NULL GENERATED ALWAYS AS IDENTITY - 插入空值:数值类型的空值要写
NULL,别用MariaDB里的''
3. 验证并重新导入
先在psql里单独执行几条语句测试(比如先跑CREATE TABLE),确认没问题后再重新执行导入命令:
psql -h localhost -d test -U postgres -f C:\test1.sql
内容的提问来源于stack exchange,提问作者ADAM
相关产品推荐
相关产品推荐

