0

ドロップされていない「test123」DBを3日からドロップしようとしています。そのようなデータベースが存在しないというPostgresの応答..どのようにリストされているのかわかりません。および \r を含むデータベース

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 に配置された「+」が何であるかを知る必要があります。そして落とし方。ここで同様の問題に対して指定された手順を既に試しましたが、問題は解決されなかったことをお知らせします。

4

1 に答える 1

1

問題のあるデータベース名は\r、改行 (ASCII コード 10) とそれに続く文字列が続くキャリッジ リターン (ASCII コード 13、として表示)で構成されているようです。test123

文字列 13,10 は、Windows の行末です。

+列の末尾の記号は、列が次の行に続くことを視覚的に示すために psql によって追加されます。データベース名の一部ではありません。

次のコマンドを発行して、正確な文字コードを確認できます。

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

0d0a74657374313233CRLF に加えてスペースがない場合、期待される結果は次のようになります。(それ以外の場合は、実際の結果で質問を更新してください)。

Unix で readline 機能を使用psqlしている場合は、次の一連のキーストロークでデータベースを削除できます。

DROP DATABASE " Ctrl+VCtrl+MEntertest123";Enter

Ctrl+VCtrl+M画面を叩くと表示されます^M

編集

インタラクティブ モードで管理できない場合はpsql、別の方法として bash からも機能し、postgres ユーザーまたはデータベース所有者が起動する必要があります。

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

バックスラッシュエスケープの解釈を有効にするオプション-eecho

于 2013-10-15T22:30:35.400 に答える