Postgresql:名称中带有“\”的用户角色

Postgresql: user role with "\" in name

我在创建角色时输入错误。现在我被“\ruser”困住了,我不知道如何正确地放弃那个角色。以任何方式转义反斜杠都行不通,使用 unicode 格式也行不通(drop role U&'%0Dmyuser';)或任何类型的字符串标记 (",',`) 都行不通。有什么想法吗?

server=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 \rmyuser  | Superuser, Create role, Create DB                          | {}
 myuser    | Superuser, Create role, Create DB                          | {}

简单地用双引号转义标识符:

DROP ROLE "\rmyuser";

如果\r不是反斜杠和r,而是“回车return”的转义版本,最简单的方法可能是使用动态SQL,扩展的字符串文字语法和 format 函数:

DO $$BEGIN EXECUTE format('DROP ROLE %I', E'\rmyuser'); END;$$;