You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

维基百科SQL转储无法加载到PostgreSQL的问题求助

解决维基百科SQL转储导入PostgreSQL的语法错误问题

你遇到的这两个错误,本质都是维基百科导出的SQL格式偏向MySQL语法,和PostgreSQL的规则不兼容导致的,我给你逐个拆解解决:

错误1:invalid command \'s_soccer_players'

问题原因

维基百科的SQL转储里用了MySQL的单引号转义方式(\'),但PostgreSQL中\是psql元命令的前缀,导致psql误把\开头的内容当成了自身命令,解析失败。

解决办法

你有两个可选方案:

  • 预处理SQL文件:用sed把所有\'替换成PostgreSQL认可的单引号转义方式(两个单引号''):
    sed -i "s/\\\'/''/g" enwiki-latest-category.sql
    
  • 导入时设置参数:在psql命令里开启standard_conforming_strings,让PostgreSQL按照SQL标准处理字符串转义,避免把反斜杠当成命令前缀:
    psql -U your_db_user -d your_db_name --set=standard_conforming_strings=on -f enwiki-latest-category.sql
    

错误2:syntax error at or near ""`

问题原因

MySQL用反引号`来包裹表名/列名,而PostgreSQL完全不识别这个符号——它要么用双引号"包裹特殊命名,要么直接不用包裹(只要名字不是关键字)。

解决办法

用sed批量替换掉所有反引号即可:

# 直接移除所有反引号(推荐,因为category这类表名不是关键字)
sed -i "s/`//g" enwiki-latest-category.sql

# 如果有特殊命名需要保留,也可以替换成双引号
# sed -i "s/`/\"/g" enwiki-latest-category.sql

完整的导入流程示例

把上面的步骤结合起来,完整的命令如下:

# 1. 预处理SQL文件,修复转义和表名格式
sed -i "s/\\\'/''/g" enwiki-latest-category.sql
sed -i "s/`//g" enwiki-latest-category.sql

# 2. 导入到PostgreSQL数据库
psql -U your_username -d your_wiki_db --set=standard_conforming_strings=on -f enwiki-latest-category.sql

另外提一句:如果后续还要导入更多维基百科的表,其实可以用MediaWiki官方的导入工具,或者专门的维基数据处理工具,能更省心地处理跨数据库的语法差异,但如果只是处理category表,上面的方法完全够用。

内容的提问来源于stack exchange,提问作者張泰瑋

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:19:56