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

Postgres:模式所有者为何无法修改异主表的归属?

问题描述

我的public模式所有者为用户eyal,该模式下某张表的所有者是postgres。当我以eyal用户登录执行语句:

ALTER TABLE public.table_name OWNER TO "eyal";

时收到错误提示:"must be owner of the table"。我已经执行过:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA "public" TO "eyal";

但问题仍未解决。为什么作为模式所有者,却没有修改旗下异主表所有者的权限?

原因与解决方案

核心原因

PostgreSQL里,模式所有权和表所有权是相互独立的权限体系:

  • 模式所有者的权限仅覆盖模式本身的管理(比如在模式内创建/删除对象、调整模式的权限设置等),无权直接修改模式内其他用户拥有的对象的所有权。
  • GRANT ALL PRIVILEGES ON ALL TABLES赋予的是表的操作权限(增删改查、创建索引、触发器等),并不包含修改表所有者的权限——这个权限只有表的当前所有者或拥有SUPERUSER权限的用户才能拥有。

解决办法

  1. 直接切换超级用户操作
    切换到postgres(或其他超级用户)身份执行修改语句:
ALTER TABLE public.table_name OWNER TO "eyal";
  1. 给eyal授予表的ALTER权限
    如果不想每次切换超级用户,可以先以postgres身份给eyal授予目标表的ALTER权限:
GRANT ALTER ON public.table_name TO "eyal";

授权完成后,eyal就能自行修改该表的所有者了。如果需要批量处理public模式下所有异主表,可以用动态SQL批量生成授权语句。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:01:55