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

PostgreSQL中角色OID是否具有不可变性?

关于PostgreSQL角色OID持久性的问题解答

核心结论

角色OID是可靠的永久唯一标识,只要角色本身存在,它的OID就不会改变,完全可以用来建立用户表与登录角色的关联。

详细说明

  • 角色OID在创建时由系统分配,除非角色被删除重建,否则OID永远不会变更——哪怕你修改角色名称、权限等属性,OID都保持原样。PostgreSQL内部就是用OID来唯一识别角色的,这是系统级的唯一标识逻辑。
  • 备份还原场景的OID一致性:如果用pg_dumpall或者带角色备份的pg_dump(比如--roles-only参数)还原角色,还原后的角色OID会和原数据库完全一致。只有当你手动重新创建角色(而非通过备份还原)时,才会分配新的OID。

针对你的需求的建议

用角色OID作为关联依据是最优选择:

  • 它不会像角色名称那样可被修改,能保证关联关系的稳定性;
  • 你可以用内置函数pg_get_userbyid(oid)快速通过OID获取角色名称,方便查询展示;
  • 绝对不要手动修改系统表中的OID,这会破坏数据库内部一致性,引发严重问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:32:35