2013-10-15 50 views
0

我試圖從3天內刪除沒有掉落的'test123'數據庫。 Postgres回覆沒有這樣的數據庫存在..我不知道它是如何列出這樣的。和數據庫\ rPostgreSQL:刪除不存在參數的數據庫

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中的'+'是什麼。以及如何放棄它。只是爲了讓你知道我已經嘗試了類似問題here給出的步驟,但我的問題沒有解決。

+3

我想你有一個名爲'\ r ... test123'的數據庫(其中'...'是一堆空格)或類似的數據庫。 –

回答

1

有問題的數據庫名稱似乎包括後跟字符串test123

字符序列13,10是回車(ASCII碼13,示出爲\r)後跟一個換行(ASCII碼10) Windows的行結束。

該列末尾的+符號由psql添加,作爲該列在下一行繼續的可視指示。它不是數據庫名稱的一部分。

您可以通過發出確認確切的字符代碼:

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

預期的結果將是0d0a74657374313233如果有除CRLF沒有空格。 (否則請用實際結果更新問題)。

如果在UNIX上使用psql與readline的功能,你可以用這個序列擊鍵刪除數據庫:

DROP DATABASE 「按Ctrl + V按Ctrl + M輸入 test123」; 輸入

擊中當按Ctrl + V按Ctrl + M屏幕應該顯示^M

編輯

如果你不能在交互模式中psql管理它,一個替代方案也應該從bash開始,由postgres用戶或數據庫所有者啓動:

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

-e選項爲echo可以解釋反斜槓轉義。

+0

我真的很感激你的幫助。是的,SELECT命令的預期結果確實顯示爲 template1 =#來自pg_database的編碼(datname :: bytea,'hex'),其中datname像'%test123'; 編碼 -------------------- 0d0a74657374313233 (1行) 爲了降DB,即按下Ctrl + V CTRL + M我看到它顯示^ M template1 =#DROP DATABASE「^ M ENTER,看起來屏幕會變成新的。 模板1" # 你能請建議如何刪除它,以及如何知道的psql在linux與readline的capablilies能夠原諒我這個問題,作爲即時通訊在學習上的PostgreSQL階段 – Johnbritto

+0

@Johnbritto:如果_SCREEN去新one_表示進入下一行,沒關係,繼續輸入其餘的按鍵,並在';'終止命令後點擊Enter,然後顯示'DROP DATABASE'並且db將會消失 –

+0

非常感謝你可以請教什麼可能是這樣的數據庫創建和鎖定的原因,我認爲我的一個開發人員會在不知不覺中犯下這個錯誤 – Johnbritto