phpMyAdmin 不支持导出 PostgreSQL 兼容 SQL,因其生成 MySQL 专用语法(如 ENGINE、反引号、AUTO_INCREMENT),PostgreSQL 直接报错;应改用 mysqldump + pgloader 等工具转换,或直连迁移。

phpMyAdmin 本身不支持直接导出 PostgreSQL 兼容的 SQL——它生成的是 MySQL 专用语法(如 ENGINE=InnoDB、AUTO_INCREMENT、反引号标识符、INSERT INTO ... VALUES (...), (...) 多值插入等),PostgreSQL 会直接报错。
为什么 phpMyAdmin 导出的 SQL 在 PostgreSQL 中跑不通
常见报错包括:ERROR: syntax error at or near "ENGINE"、ERROR: column "id" does not exist(因反引号未被识别)、ERROR: zero-length delimited identifier at or near """"(空标识符)、ERROR: multiple assignments to same column "id"(因 INSERT ... SET 语法)。这些都源于 MySQL 和 PostgreSQL 的 SQL 方言差异,而 phpMyAdmin 的导出逻辑完全围绕 MySQL 构建,没有 PostgreSQL 模式选项。
可行的替代方案:用 mysqldump + 转换工具
真正能落地的做法是绕过 phpMyAdmin,改用命令行导出标准 MySQL SQL,再用轻量工具清洗语法。关键步骤如下:
- 用
mysqldump --no-create-info --skip-extended-insert --compatible=postgresql导出数据(--compatible=postgresql仅处理极小部分兼容项,不能依赖它搞定全部) - 用
mysql2pgsql(Python 工具,GitHub 可搜)或pgloader(推荐,支持自动类型映射、约束转换、进度反馈)执行转换 - 若表结构简单,可手动替换:把
`table_name`改成"table_name",INT(11) NOT NULL AUTO_INCREMENT改成INTEGER GENERATED BY DEFAULT AS IDENTITY,DEFAULT CURRENT_TIMESTAMP改成DEFAULT NOW() - 避免用 phpMyAdmin 的“自定义导出”里勾选“SQL 兼容性”——那个选项只影响 MySQL 内部版本兼容,和 PostgreSQL 无关
更稳的路径:用 pgloader 直连 MySQL 迁移
如果目标是最终把数据进 PostgreSQL,跳过中间 SQL 文件更可靠:
立即学习“PHP免费学习笔记(深入)”;
- 确保 MySQL 开放远程访问(或本地运行),并创建只读用户:
CREATE USER 'migrator'@'%' IDENTIFIED BY 'pwd'; GRANT SELECT ON mydb.* TO 'migrator'@'%'; - 安装
pgloader(Debian/Ubuntu:sudo apt install pgloader;macOS:brew install pgloader) - 执行迁移:
pgloader mysql://migrator:pwd@localhost/mydb postgresql:///mydb,它会自动处理类型转换(如TINYINT→BOOLEAN)、主键、索引、注释,甚至支持增量同步 - 注意:pgloader 不会导出触发器、存储过程,业务逻辑需另行适配
真正麻烦的从来不是导出按钮点哪,而是 MySQL 的 TEXT 默认允许空字符串、PostgreSQL 的 TEXT 却严格区分 NULL 和 ''——这类语义差异不会被任何“格式转换”自动修复,必须人工核对字段约束和应用层逻辑。



















