如何从Postgres数据库中删除用户

时间:2015-12-03 16:26:55

标签: postgresql

我有以下postgres用户,我可以通过在终端中调用\ du命令来查看,如下所示:

postgres=# \du 

                            List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}
 tutorial1 |                                                | {}

根据postgres documentation,我应该能够删除名为" tutorial1"输入以下命令:

postgres=# DROP USER tutorial1

但是,当我使用该命令时没有任何反应。文档没有提供任何关于为什么它不起作用的提示,也没有提供明确的例子。

那就是说 - 放弃这个用户的命令是什么?

6 个答案:

答案 0 :(得分:16)

您的命令没问题,但您忘记将;放在命令的末尾。

试试这个

postgres=# DROP USER tutorial1; (Note I put semicolon at the end)

答案 1 :(得分:13)

如果您发现自己(像我一样)因为您无法删除用户,以下模板可能会有所帮助:

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM tutorial1;
DROP USER tutorial1;

用户可能拥有其他模式的权限,在这种情况下,您必须使用" public"运行相应的REVOKE行。替换为正确的架构。要显示用户的所有模式和权限类型,我编辑了\ dp命令以进行此查询:

SELECT 
  n.nspname as "Schema",
  CASE c.relkind 
    WHEN 'r' THEN 'table' 
    WHEN 'v' THEN 'view' 
    WHEN 'm' THEN 'materialized view' 
    WHEN 'S' THEN 'sequence' 
    WHEN 'f' THEN 'foreign table' 
  END as "Type"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.array_to_string(c.relacl, E'\n') LIKE '%postgres%';

我不确定哪些权限类型对应于在TABLES,SEQUENCES或FUNCTIONS上撤销,但我认为它们都属于三者之一。

答案 2 :(得分:12)

我在寻找所有要放松的东西上浪费了太多时间。除了以上内容(或可能完全替代),请参考以下类似问题的答案:https://stackoverflow.com/a/11750309/647581

DROP OWNED BY your_user;
DROP USER your_user;

对我有用吗

答案 3 :(得分:5)

首先在Ubuntu终端操作中:

$ sudo -su postgres
$ psql postgres

然后在postgres终端:

# \du
# drop user 'user_name';
# \du

[注意]:

不要忘记分号";"

答案 4 :(得分:1)

Timofey的答案几乎对我有用,但我还需要撤销架构级别的权限。所以我的放置脚本看起来像这样:

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON SCHEMA public FROM tutorial1;
DROP USER tutorial1;

因此,撤销可能需要在此处发生的任何级别进行:

https://www.postgresql.org/docs/9.1/static/sql-revoke.html

答案 5 :(得分:0)

如果用户名test.user中有点

drop user test.user;

ERROR:  42601: syntax error at or near "."

drop user "test.user";

应该解决。