在 postgres 中更改所有者的意外行为

Unexpected behavior from changing owner in postgres

我有一个表的架构 myschema,在 postgres 中有不同的所有者 - 所有者 'foo' 和所有者 'bar'

在将数据库的所有权限授予所有者 'bar' 之后,然后以用户 'bar' 重新登录后,我尝试将所有 bar 拥有的表的所有权更改为 'foo' 使用以下命令:

SELECT format(
  'ALTER TABLE %I.%I.%I OWNER TO %I;',
  table_catalog,
  table_schema,
  table_name,
  'foo'  
)
FROM information_schema.tables
WHERE table_schema = 'myschema'

然后returns:

 ALTER TABLE my_db.my_schema.my_tableA OWNER TO foo;
 ALTER TABLE my_db.my_schema.my_tableB OWNER TO foo;
 ALTER TABLE my_db.my_schema.my_tableC OWNER TO foo;

成功

然后,当我 运行 select * from pg_tables; 时,我看到 none 的 tableowners 发生了变化。这怎么可能,会发生什么?

要将表的所有权从 bar 更改为 foo,用户必须是这两个角色的成员。所以如果 bar 应该能够做到这一点,它必须是超级用户或 foo:

的成员
GRANT foo TO bar;

我猜你的陈述导致了一个你不知何故没有看到并且没有做任何事情的错误。