PostgreSQL是否支持针对指定schema运行vacuumlo工具
能否在数据库指定schema上运行vacuumlo工具
原生自带的vacuumlo工具没有提供直接指定单个schema运行的参数,默认扫描范围是连接的整个数据库,这也是你目前只能全库执行的原因。
如果需要只清理指定schema范围内的孤立大对象,可以用以下两种可落地的方案实现:
- 权限隔离法
新建一个专用的数据库账号,仅给这个账号授予目标schema的读写、对象访问权限,收回该账号对库内其他所有schema的访问权限。之后用这个账号连接数据库执行vacuumlo即可,工具只会扫描、清理当前账号有权限访问的对象关联的孤立大对象,不会触碰其他schema下的内容。
预检查(仅列出待删除内容不实际执行)的命令参考:
确认预检查列出的待清理大对象范围符合预期后,去掉vacuumlo -n -h <数据库主机地址> -p <数据库端口> -U <受限专用账号> <目标数据库名>-n参数即可正式执行清理。 - 手动筛选定向清理法
如果不想额外创建账号,可以通过查询系统表,先拉取目标schema下所有大对象字段引用的大对象OID列表,再和pg_largeobject_metadata中存储的全量大对象做差集,筛选出属于该schema范围的孤立大对象,逐个调用lo_unlink函数删除即可。这种方式操作灵活度高,但需要你对PostgreSQL的大对象关联逻辑足够熟悉,操作前必须做好全量备份,避免误删正在使用的大对象。
注意:不要直接通过删除
pg_largeobject系统表记录的方式清理大对象,会破坏大对象的元数据一致性,大概率造成数据损坏。
内容的提问来源于stack exchange,提问作者Guhopa
相关产品推荐
相关产品推荐

