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;$$;
我在创建角色时输入错误。现在我被“\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;$$;