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

RDS PostgreSQL 13.13升级至15.5报错:零长度分隔标识符求助

PostgreSQL RDS 13.13升级至15.5的空权限错误解决方法

这个错误是因为你的PostgreSQL 13实例中存在无效的权限记录:用户my_user_1被授予了一个空名称的角色/权限,导致pg_upgrade生成的全局dump文件中出现了GRANT "" TO "my_user_1"这种不符合语法的SQL语句,新版本PostgreSQL对这类无效语法的校验更严格,因此升级失败。

解决步骤如下:

  • 步骤1:定位无效权限记录
    登录原RDS PostgreSQL 13实例,执行以下查询找出无效的权限记录:
SELECT
    r.rolname AS granted_role,
    m.rolname AS grantee,
    g.rolname AS grantor
FROM pg_auth_members am
LEFT JOIN pg_roles r ON am.roleid = r.oid
LEFT JOIN pg_roles m ON am.member = m.oid
LEFT JOIN pg_roles g ON am.grantor = g.oid
WHERE r.rolname IS NULL;

该查询会返回所有被授予了不存在(空名称)角色的权限记录。

  • 步骤2:清理无效数据
    确认查询返回的记录为无效数据后,执行删除操作清理:
DELETE FROM pg_auth_members WHERE roleid NOT IN (SELECT oid FROM pg_roles);

注意:操作前请确保这些无效记录不会影响业务,必要时先备份相关数据。

  • 步骤3:重新发起升级
    清理完成后,再次尝试将RDS实例升级至15.5版本即可。

这类问题通常是历史操作遗留的无效数据(比如误执行的GRANT语句、角色被删除但权限记录未同步清理)导致,旧版本PostgreSQL对这类不规范记录的容忍度更高,而新版本的语法校验更严格,因此升级时触发报错。

内容的提问来源于stack exchange,提问作者Vazgen Torosyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:57:39