架构公共所有者的更改取决于我登录的人员?

时间:2014-01-03 16:32:26

标签: postgresql privileges psql

$ psql postgres

postgres=# \dn
        List of schemas
        Name        |  Owner
--------------------+----------
 information_schema | postgres
 pg_catalog         | postgres
 pg_toast           | postgres
 pg_toast_temp_1    | postgres
 public             | student
(5 rows)

当我使用用户postgres登录psql时,它显示schema public由用户student拥有。但是,当我使用用户student登录到psql时:

$ psql student

student=> \dn
        List of schemas
        Name        |  Owner
--------------------+----------
 information_schema | postgres
 pg_catalog         | postgres
 pg_toast           | postgres
 pg_toast_temp_1    | postgres
 public             | postgres
(5 rows)

它表明schema public由用户postgres拥有。

如果有权限的用户认为已经完成了,那么如何将架构的所有权转让给用户学生?

1 个答案:

答案 0 :(得分:11)

这是一种误解。您正在登录两个不同的数据库

运行时

$ psql postgres

postgres是数据库的名称。使用默认配置时,数据库用户的名称将自动使用ident authentication从系统用户的名称派生。唯一的参数假定为数据库名称。您想要更改数据库postgres中的任何内容,它是维护任务的系统数据库。

另一个数据库名为student。每个数据库都有一个模式public及其各自的所有者。

阅读manual for psql或尝试低级man psql

要转移数据库public中架构student的所有权,请以超级用户身份登录:

psql -U postgres student

或者只是(作为系统用户postgres):

psql student

并运行:

ALTER SCHEMA public OWNER TO student;

Details in the manual再一次。