蓝空图床上传失败问题排查

环境说明

  • 使用 1Panel 部署

  • 采用 PostgreSQL 数据库

  • 软件版本:V 2.1

案例说明

官方网站: https://www.lsky.pro

使用手册: https://docs.lsky.pro

仓库地址: https://github.com/lsky-org/lsky-pro

社区:https://bbs.lskypro.com/

使用PicGo上传图片失败,由于无法定位错误原因,重新使用程序调用接口上传,也没有提示具体错误原因

了解该工具更多详细内容可参考:批量备份迁移 Markdown 文件中的图片解决方案

image-20241018145627290

查看错误日志

蓝空图床的错误日志保存路径为:data/storage/logs

可以看到我这里提示有个SQL错误,主键重复了

image-20241018150440865

定位问题并分析错误原因

正常情况下是不会有这个错误的,我这里出现这个错误可能是昨晚迁移数据时不小心误操作了数据库,改了主键关联的序列数据。

本错误处理步骤

注意此处我使用的是PostgreSQL,其他数据库出现此类错误执行语句可能有所不同

查找序列名称

要找到与自增 ID 字段关联的序列名称。通常,序列名称的格式是 表名_字段名_seq

1
SELECT pg_get_serial_sequence('表名', '字段名');

例如此处我要查询的表为images,主键字段为id

1
SELECT pg_get_serial_sequence('images', 'id');

查询得到的序列名称如下:

1
public.images_id_seq

查询images表中最大ID为3372

设置序列的下一个值:

使用 ALTER SEQUENCE 语句来设置序列的下一个值。

例如,如果你想将 id 的下一个值设置为 1000,可以使用以下语句:

1
ALTER SEQUENCE 序列名称 RESTART WITH 1000;

此处我需要将public.images_id_seq序列的下一个值设置为3373

1
ALTER SEQUENCE public.images_id_seq RESTART WITH 3373;

重新测试

修改好后重新上传图片成功