Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何从Postgres数据库中删除用户_Postgresql - Fatal编程技术网

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

Postgresql 如何从Postgres数据库中删除用户,postgresql,Postgresql,我可以通过调用终端中的\du命令查看以下postgres用户,如下所示: postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------+----------- postgres

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

postgres=# \du 

                            List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}
 tutorial1 |                                                | {}
根据,我应该能够通过输入以下命令删除名为“tutorial1”的用户:

postgres=# DROP USER tutorial1
但是,当我使用该命令时,什么也不会发生。文档中没有提供任何关于为什么这不起作用的提示,也没有提供明确的示例


也就是说,删除这个用户的命令是什么

您的命令正常,但您忘记输入
位于命令末尾

像这样试试

postgres=# DROP USER tutorial1; (Note I put semicolon at the end)
如果您发现自己(像我一样)出现在这里,因为您无法删除该用户,以下模板可能会有所帮助:

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%';

我不确定哪些特权类型对应于撤销表、序列或函数,但我认为它们都属于三种特权类型之一。

首先在Ubuntu终端操作中:

$ sudo -su postgres
$ psql postgres
然后在postgres的终端:

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

[注意]:

不要忘记分号
“;”


[更新]:


Timofey的回答几乎对我有效,但我还需要撤销模式级别的权限。因此,我的drop脚本如下所示:

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;
因此,撤销可能需要在此处发生的任何级别发生:


我浪费了太多的时间试图找到所有可以放松的东西。除了上述问题(或可能作为完全替代),请参考以下类似问题的答案:


如果你在用户名test.user中有点,你帮我做了这个把戏吗

drop user test.user;

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

drop user "test.user";

应该解决它。

删除角色教程1
我假设您忘记了语句末尾的分号
所有语句都必须以
结尾
删除用户“用户名”不要忘记双引号由于此错误而对您的答案投了反对票
错误:无法删除角色“tutorial1”,因为某些对象依赖于它
@kabrice:投反对票是错误的。对象依赖于角色的事实与如何运行语句以删除角色的问题无关。如果我已经向用户授予了架构上的使用权限,我必须从用户_y
撤销架构_x上的所有权限。这是我缺少的一部分:将所有者重新分配为是,这对我有效。谢谢
drop user test.user;

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

drop user "test.user";