我有以下postgres用户,我可以通过在终端中调用\ du命令来查看,如下所示:
postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication | {} tutorial1 | | {}
根据postgres文档,我应该能够通过输入以下命令来删除名为"tutorial1"的用户:
postgres=# DROP USER tutorial1
但是,当我使用该命令时没有任何反应.该文档没有提供任何关于它为什么不起作用的提示,也没有提供明确的示例.
那就是说 - 放弃这个用户的命令是什么?
如果您发现自己(像我一样)因为您无法删除用户,以下模板可能会有所帮助:
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;
用户可能拥有其他模式的权限,在这种情况下,您必须运行相应的REVOKE行,并将"public"替换为正确的模式.要显示用户的所有模式和权限类型,我编辑了\ 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上撤销,但我认为它们都属于三者之一.
我浪费了太多时间试图找到所有要放松的东西.除了以上(或可能作为完整替代),请参阅类似问题的答案:https://stackoverflow.com/a/11750309/647581
DROP OWNED BY your_user; DROP USER your_user;
为我做了诀窍
你的命令没问题,但你忘了把它放在;
命令的末尾.
试试这样吧
postgres=# DROP USER tutorial1; (Note I put semicolon at the end)
首先在Ubuntu终端操作:
$ sudo -su postgres $ psql postgres
然后在postgres终端:
# \du # drop user 'user_name'; # \du
[ 注意 ]:
不要忘记分号 ";"