PostgreSQL:Drop DB没有参数退出

时间:2013-10-15 20:43:46

标签: postgresql

我正在尝试从3天开始放弃'test123'DB,这不会下降。没有这样的数据库的Postgres回复存在..我不知道它是如何列出这样的。和\ r \ n

的数据库
template1=# select * from pg_database;
        datname        | datdba | encoding | datcollate  |  datctype   | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace |               datacl                
-----------------------+--------+----------+-------------+-------------+---------------+--------------+--------------+---------------+--------------+---------------+-------------------------------------
 template1             |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | t             | t            |           -1 |         12035 |          709 |          1663 | {=c/postgres,postgres=CTc/postgres}
 template0             |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | t             | f            |           -1 |         12035 |          709 |          1663 | {=c/postgres,postgres=CTc/postgres}
 postgres              |     10 |        6 | en_US.UTF-8 | en_US.UTF-8 | f             | t            |           -1 |         12035 |          709 |          1663 | 
 PremierSuppliers      |  16384 |        6 | en_US.UTF-8 | en_US.UTF-8 | f             | t            |           -1 |         12035 |          709 |          1663 | 
 \r                   +|  16384 |        6 | en_US.UTF-8 | en_US.UTF-8 | f             | t            |           -1 |         12035 |          709 |          1663 | 
 test123               |        |          |             |             |               |              |              |               |              |               | 

任何解决方案?删除\ r和test123。我需要知道\ r \ n中放置的'+'是什么。以及如何放弃它。只是为了让你知道我已经尝试了类似问题here给出的步骤,但我的问题没有解决。

1 个答案:

答案 0 :(得分:1)

有问题的数据库名称似乎包含回车符(ASCII代码13,显示为\r),后跟换行符(ASCII代码10),后跟字符串test123

字符序列13,10是Windows中的行尾。

列末尾的+符号由psql添加,作为列在下一行继续的可视指示。它不是数据库名称的一部分。

您可以通过发出以下内容确认确切的字符代码:

SELECT encode(datname::bytea,'hex') from pg_database where datname like '%test123';

如果CRLF之外没有空格,则预期结果为0d0a74657374313233。 (否则请用实际结果更新问题。)

如果在Unix中使用psql并具有readline功能,则可以使用以下按键序列删除数据库:

DROP DATABASE" Ctrl + V Ctrl + M 输入 test123&#34 ;; 输入

点击 Ctrl + V Ctrl + M 时,屏幕应显示^M

修改

如果您无法在交互模式下在psql内进行管理,作为替代方案,这也应该来自bash,由postgres用户或数据库所有者启动:

echo -e "DROP DATABASE \"\r\ntest123\";" | psql -d template1

-e的{​​{1}}选项可以解释反斜杠转义。