$ 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拥有。
如果有权限的用户认为已经完成了,那么如何将架构的所有权转让给用户学生?
答案 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;