MySQL备份导入PostgreSQL因反引号`出现语法报错该如何解决?
PostgreSQL 本身没有提供配置项可以让psql直接将反引号识别为单引号,该报错的核心原因是你手头的备份是MySQL导出的SQL文件,反引号是MySQL用来包裹标识符(表名、字段名等)的专用语法,而PostgreSQL的标识符引用语法用的是双引号,二者不兼容。另外你提到的把反引号替换为单引号的思路不可行,单引号在PostgreSQL中是字符串引用符,用来包裹表名反而会触发新的语法错误。
你可以通过以下几种方式解决问题:
- 批量替换备份文件中的反引号
如果你确认备份文件中所有反引号都只是用来包裹标识符,没有出现在字符串内容等其他场景中,可以直接用命令行工具批量替换为双引号,Linux/macOS下执行:sed -i 's//"/g' db_backup.sql`
替换完成后再执行导入命令即可。 - 使用专门的迁移工具转储
如果你还能访问原来生成备份的MySQL数据库,更稳妥的方案是使用pgloader这类数据库迁移工具,直接从MySQL导出兼容PostgreSQL的格式,会自动处理包括反引号、字段类型、语法差异在内的各类兼容问题,避免手动修改文件带来的未知错误。 - 手动修改少量异常语句
如果备份文件中反引号的出现频次很低,可以手动打开文件,把DROP TABLE IF EXISTS \tablename``这类语句中的反引号直接删除,或者替换为双引号,只要对应的标识符没有和SQL关键字重名、也不包含特殊字符,删除反引号后即可正常执行。
内容的提问来源于stack exchange,提问作者Some Guy
相关产品推荐
相关产品推荐

