查找自定义数据类型的当前所有者?

Era*_*iel 3 postgresql datatypes permissions postgresql-9.1

在 Postgresql 中,当我尝试ALTER TYPE x ADD VALUE y;在自定义数据类型上运行时,我收到一条错误消息,指出PG::Error: ERROR: must be owner of type x.

我知道这可以通过运行来解决,ALTER TYPE x OWNER TO <database owner>但我很好奇的是如何检查此特定数据类型的当前所有者。\dT+ x没有给我关于当前所有者的信息。

如何提取有关自定义数据类型的更多信息,包括当前所有者?

dez*_*zso 6

直到 9.4

您可以去询问系统目录(pg_type准确地说是 ):

SELECT rolname 
  FROM pg_type t 
  JOIN pg_authid r ON typowner = r.oid 
 WHERE typname = 'bla';

 usename 
?????????
 dezso
Run Code Online (Sandbox Code Playgroud)

从 PostgreSQL 9.5 开始

从这个版本开始,有一个名为的新对象标识符类型regrole,它使查询更简单一些:

SELECT typowner::regrole 
  FROM pg_type t 
 WHERE typname = 'bla';
Run Code Online (Sandbox Code Playgroud)

但还有更多 - 新的 9.5 版本psql在使用时已经显示所有者\dT+

      Schema       | Name | Internal name | Size | Elements |  Owner   | ...
-------------------+------+---------------+------+----------+----------+ ...
 zel_api_r14_00_09 | bla  | bla           | 4    | a        | postgres | ...
Run Code Online (Sandbox Code Playgroud)