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

PostgreSQL中schemaname与tableowner的区别是什么

PostgreSQL中schemaname和tableowner的区别

二者是完全独立的两个属性,核心差异如下:

  • schemaname是数据库的逻辑命名空间标识,作用是对表、视图、函数等数据库对象做归类,解决同名对象冲突问题。同一个数据库下可以存在多个同名的表,只要所属的schema不同即可区分,你查询结果里的admcdba就是这些表所属的命名空间。
  • tableowner是表的权限归属角色,指对该表拥有全部操作权限的数据库用户/角色,和表所在的schema没有绑定关系。你查询结果里的postgres是PostgreSQL默认的超级管理员角色,说明这些表的最高权限归属postgres。

你遇到的二者取值不同的情况非常常见,最典型的场景就是你用postgres用户登录数据库,在已有的admcdba schema下创建表,例如执行建表语句:

CREATE TABLE admcdba.class_dim (id int);

这条语句生成的表schemaname会是你显式指定的admcdba,而所有者默认取当前登录的用户postgres,自然就会出现二者不一致的情况。

额外补充:schema本身也有独立的所有者属性,admcdba这个schema的所有者和该schema下存储的表的所有者没有关联,你可以执行以下语句查询admcdba schema的所有者做验证:

SELECT nspname AS schemaname, usename AS schema_owner 
FROM pg_namespace n 
JOIN pg_user u ON n.nspowner = u.usesysid 
WHERE n.nspname = 'admcdba';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:09:01