如何删除名称中包含回车符的PostgreSQL数据库?

6

通过代码进行恢复,我以以下名称(从 \l 命令的模拟输出中得出)结束了一个数据库:

       Name       |
------------------|
 \r              +|
 DATABASE_NAME    |

我希望能够删除它,但是我不知道如何正确构造名称,以便在通过DROPDB或DROP数据库命令指定换行符时包括换行符。

如果我不能删除它-我可以更改所有者来隐藏它-这是否也涉及指定名称?

Ubuntu上的PostgreSQL 9.2.4

2个回答

3

在像下面这样删除数据库时,使用unicode进行换行

drop database U&"\000ADATABASE_NAME";

你可以使用ALTER命令来修改名称,例如:
alter database U&"\000ADATABASE_NAME" rename to "DATABASE_NAME_NEW";

要找出数据库名称中正确的前缀字符,您可以使用此处的hex函数:https://dev59.com/NlcP5IYBdhLWcg3wJnDp#44814220 SELECT hex(datname) FROM pg_database; - bigbear3001

2
do $$
begin
    execute format('drop database %I', E'\rDATABASE_NAME');
end;
$$

Rahul的回答应该是:

drop database U&"\000ADATABASE_NAME";

谢谢你指出那个错误。看到你的答案后,我已经编辑了我的回答。希望没问题。另外,我觉得你应该在我的回答中发表同样的评论。 - Rahul
谢谢你们两个。最终帮助我的命令是:alter database U&"\000A\000DDATABASE_NAME"; - raycarnes
这个答案对我没用。我遇到了25001错误: [25001] 错误:无法从函数或多命令字符串中执行DROP DATABASE语句 位置:SQL语句“DROP DATABASE“ DATABASE”” PL/pgSQL函数inline_code_block第3行处的EXECUTE - bigbear3001

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接