2012-10-02 14 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名称,=是行状态(详见下面),#表示您是超级用户。如果你不是超级用户,最后一个字符是>。

线路状态有趣的是,它可以是任何的:

  • =新的命令行

    (即不继续,引用等)
  • - 对于续行
  • $使用引号的字符串$报价$语法
  • '带引号的文本使用‘文字’语法
  • “带引号的标识符使用‘标识符’的语法

意识到这一点,注意提示后会存储无数的问题。