Waline评论系统的数据迁移
最近我不是将网站从Vercel迁移到了Netlify上吗(将静态博客和Waline评论系统从Vercel迁移至Netlify(含Netlify设置重定向和Waline的部署)),所以就得涉及到Waline评论系统的数据的迁移。
数据迁移这个东西其实非常的简单,就三种迁移方式:
- 最简单:不更换数据库服务商。(例如原本的是Neon的数据库,我直接在新的Waline环境变量上设置上Neon的数据库配置就行,适合菜鸟)
- 比较有问题:更换数据库服务商,通过数据库软件将数据库从旧的迁移到新的。(会遇到问题,不适合菜鸟)
- 比较有问题:通过Waline评论系统内置的导入导出工具进行迁移。(会遇到问题,如果数据中的某些评论内容包含了特殊字符,在导入 PostgreSQL 时导致 Unicode 转义错误。)
最简单的那个我们就不说了,先说第二种。
更换数据库服务商,通过数据库软件将数据库从旧的迁移到新的
这种方法并不推荐,尤其是使用国外数据库的用户,在国内使用数据库软件访问会比较卡顿。
各位可以使用自己熟悉的软件来操作。我个人推荐的是使用Navicat Premium Lite这个软件,反正现在它对于个人的使用是不受限制免费使用,不像以前还需要破解啥的。
找到表导出,然后到新的数据库里面导入就行。
会遇到的错误
但是通过此方法迁移的数据,会导致新评论会报错“duplicate key value violates unique constraint “wl_comment_pkey””。
这个错误说明你的数据库序列(Sequence)没有随着数据迁移而更新,导致新插入数据时,自增主键 ID 与已有数据冲突。
在数据库中运行 SELECT setval('wl_comment_seq', (SELECT MAX(id) FROM wl_comment)+1) 可以解决。
但是如果遇到向Nile这种极端的限制的,以上的命令可能真的就无法执行,并且连ALTER TABLE ... ALTER COLUMN ... DROP DEFAULT都不支持,可以尝试使用第三种方法,通过Waline内部的导入导出工具来迁移数据。
通过Waline评论系统内置的导入导出工具进行迁移
很简单,登入Waline评论系统的后台。

直接选择上面的导入导出,然后在导入导出界面选择导出即可,浏览器会下载一份waline的json文件,它就是Waline里面所有的数据了。
如果你们的评论都是普通的文字评论,那基本上不会遇到问题。可是如果遇到里面夹杂着代码等特殊字符的评论,那就是另外的一回事了。可能会报错:ERROR error: invalid Unicode escape at ……
错误是因为备份数据中的某些评论内容包含了特殊字符,在导入 PostgreSQL 时导致 Unicode 转义错误。Waline 后台导入功能在将数据写入 PostgreSQL 时,没有正确处理数据中的转义字符。
https://xieyuqaq.github.io/waline-comment-system-backup-data-import-error-repair./ 大家可以借助以上的这个工具进行清理,代码也在GitHub上发布了。https://github.com/XieYuQAQ/waline-comment-system-backup-data-import-error-repair. 通常情况下,通过此工具就能成功的把数据给它迁移过来了。
至此,数据的迁移就到此结束了。以上是我在迁移过程中遇到的所有问题,如果你们也遇到的话可以参考一下我的解决方法,可能适用也可能不适用,需要你们自己尝试。