2012-10-02 36 views
3

當執行rake數據庫時,我得到錯誤FATAL角色:create:all。postgresql:CREATE ROLE不起作用

這裏的帖子提出了同樣的問題,但答案不起作用。

Travis CI: FATAL: role does not exist

我到PostgreSQL的控制檯是這樣的: '須藤Postgres的-u psql的'

打字

CREATE ROLE X SUPERUSER 
CREATE ROLE X CREATEDB LOGIN 

或任何爲此事,在Postgres的=#提示符呢沒有。絕對沒有。它不會給我一個成功或失敗的消息或任何確認消息。

當我鍵入\ du列出角色時,只有postgres角色在那裏。

+3

你是否必須結束命令;執行它? – iouri

回答

4

我發現很像MySQL,postgresql要求我在命令的末尾使用分號。

我太習慣MS SQl不要求它。

+0

幾乎所有的SQL工具都需要';'來終止一條SQL語句。微軟的工具是唯一不對的人:有些語句不需要';',有些似乎在開始時需要它(例如'WITH'),有些則絕對需要它(例如'MERGE' - 即使在編程語言中,也不能在沒有';'的情況下發送它)。這完全不一致和混亂。 –

+0

WITH WITH在開始時並不需要它,這只是人們採用的一種約定,用於反擊通常不會將它們置於陳述結尾的慣例......imho解決錯誤問題的示例 – araqnid

+0

MS SQL通常用「go」iirc單行結束前端命令。我認爲內部分號用於終止語句f。例如,在存儲過程或函數定義中。 –

0

當CREATE ROLE執行時,你應該得到一個確認,說的是,CREATE ROLE。

如果沒有發生這可能是因爲該語句沒有發送到服務器。正如其他人指出的,你錯過了;在命令的末尾。按ctrl-C取消當前命令,然後重新開始。 CTRL-C只會中止當前的命令,不會終止psql,所以不用擔心。

psql命令行工具的一個很好用的事情是,提示告訴你很多東西。如果你看,當你登錄時你會看到一些看起來像postgres =#的東西。

postgres是db名稱,=是行狀態(詳見下面),#表示您是超級用戶。如果你不是超級用戶,最後一個字符是>。

線路狀態有趣的是,它可以是任何的:

  • =新的命令行

    (即不繼續,引用等)
  • - 對於續行
  • $使用引號的字符串$報價$語法
  • '帶引號的文本使用‘文字’語法
  • 「帶引號的標識符使用‘標識符’的語法

意識到這一點,注意提示後會存儲無數的問題。