Philomena是一个优秀的Booru式图像管理Web服务平台。但是,部分管理功能无法直接在Web页面中完成。此时,可以使用数据库操作完成这些任务。
此处假设Philomena运行于Dev模式下。
登录数据库
Philomena默认使用宿主于Docker容器内的PostgreSQL数据库承载业务数据。可以使用docker命令切入数据库容器:
docker exec -it CONTAINER_ID /bin/bash
其中CONTAINER_ID为Docker容器的Container ID,格式形如“1fa5a1c22fbc”,可以使用docker ps命令获取名字(NAMES字段)类似philomena-postgres-1或映像(IMAGE字段)类似postgres:17.4-alpine的容器的ID。
进入容器终端后,通过psql调用PostgreSQL控制台,使用默认用户名postgres登录:
psql -U postgres
列出数据库:
\l
连接到philomena_dev数据库:
\c philomena_dev
列出数据表:
\dt
核准新用户
Philomena的Web管理无法直接核准新注册用户的注册(需注册用户通过电子邮件确认),但是可以通过数据库操作实现。用户信息储存于users表中。
列出所有用户的ID信息:
SELECT id,email,confirmed_at FROM users;
confirmed_at字段为空的用户处于未确认(未核准)状态。
直接核准特定用户,此处以核准id字段为5的用户为例:
UPDATE users SET confirmed_at='2025-04-23 07:28:05' WHERE id=5;
删除用户
此处以删除id大于等于2的所有用户为例:
DELETE FROM users WHERE id>=2;
清除所有没有关联图像的标签
该操作将删除所有关联图像个数为0的标签:
DELETE FROM tags WHERE images_count=0;
清除特定图像下所有的标签
此操作完成后,需要在Philomena的Web页面中对涉及的标签进行重新索引(计数)。
此处以清除image_id为1的图像下所有的标签为例:
DELETE FROM image_taggings WHERE image_id=1;
清除特定图像下特定的标签
此操作完成后,需要在Philomena的Web页面中对涉及的标签进行重新索引(计数):
此处以清除image_id为1的图像下所有tag_id大于40小于70的标签为例:
DELETE FROM image_taggings WHERE image_id=1 AND tag_id>40 AND tag_id<70;
修改特定图像下特定的标签
此操作完成后,需要在Philomena的Web页面中对涉及的标签进行重新索引(计数):
此处以清除image_id为1的图像下tag_id为1的标签改为tag_id为4的标签为例:
UPDATE image_taggings SET tag_id=4 WHERE image_id=1 AND tag_id=1;
清除特定图片下所有的评论
清除评论需要同时更新comments和comments_count等2个表。
此处以清除image_id为1的图像下所有的评论为例:
DELETE FROM comments WHERE id>=1;
UPDATE images SET comments_count=0 WHERE id=1;
删除特定讨论串
此处以删除id为1的讨论串为例:
DELETE FROM topics WHERE id=1;
更新论坛板块统计数目:
UPDATE forums SET topic_count=0, post_count=0 WHERE id=1;
参考资料
https://github.com/derpibooru/philomena/issues/269