不能使用 dropdb 删除 PostgreSQL 数据库吗?

Cod*_*dit 5 postgresql maintenance linux

我不能使用删除数据库

dropdb
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

 ERROR:  must be owner of database 
Run Code Online (Sandbox Code Playgroud)

但是psql \l我看到用户管理员(删除数据库的那个)

 admin=CTc/postgres
Run Code Online (Sandbox Code Playgroud)

除了我想删除的数据库。

Linux 中的 PostgreSQL 9.x 有什么问题?

Erw*_*ter 9

您在那里看到的psql \l仅意味着 Postgres 角色admin已被Postgres 角色授予了一些特权postgres- 这是默认的超级用户,可能是数据库的实际所有者

引用手册:

如果超级用户选择发出GRANTorREVOKE命令,则执行该命令就好像它是由受影响对象的所有者发出的一样。特别是,通过这样的命令授予的特权似乎是由对象所有者授予的。

授予的特权是

C -- CREATE
c -- CONNECT
T -- TEMPORARY
Run Code Online (Sandbox Code Playgroud)

CONNECTTEMPORARY在数据库上也是 的默认默认权限PUBLIC,但我们在这里看到的已被明确授予。

没有授予删除数据库的权限,它不能。只有数据库的所有者才能删除它。(或超级用户。)因此错误消息:

错误:必须是数据库的所有者

通常,每个 shell 用户都使用同名的 Postgres 角色连接。因此,鉴于您拥有必要的sudo权利,应该这样做:

sudo -u postgres dropdb my_database_name_here
Run Code Online (Sandbox Code Playgroud)

或者postgres 像这里演示的那样切换到 shell 用户。

但您可能必须先断开其他用户的连接。看: