PostgreSQL无法创建用户

时间:2015-08-21 19:26:28

标签: postgresql psql

问题:我可以从shell(bash,OSX)创建用户或数据库,但不能创建postgres cli。从bash我没有得到确认,如果成功。

如果我尝试在psql中创建ROLE,那么我没有得到任何响应,也没有产生任何错误。如果我尝试从bash createuser 那么如果成功则不报告任何内容,如果不成功则会生成错误:"角色用户名已经存在"。

Example:

Yunti-# CREATE ROLE testuser
Yunti-# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 Yunti     | Superuser, Create role, Create DB, Replication | {}
 anything  |                                                | {}
 monkey    |                                                | {}

Yunti-# CREATE DATABASE testdb
Yunti-# \l
                              List of databases
   Name    | Owner | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+-------+----------+-------------+-------------+-------------------
 Yunti     | Yunti | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | Yunti | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | Yunti | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/Yunti         +
           |       |          |             |             | Yunti=CTc/Yunti
 template1 | Yunti | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/Yunti         +
           |       |          |             |             | Yunti=CTc/Yunti
 test      | Yunti | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 test5     | Yunti | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
(6 rows)

Yunti-# 

使用createdb时会发生类似的事情。

如何在postgres cli中创建用户和数据库? 在bash中对大多数postgres命令没有响应是正常的吗?

信息:用户及其特权:

Yunti-# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 Yunti     | Superuser, Create role, Create DB, Replication | {}
 anything  |                                                | {}
 monkey    |                                                | {}

2 个答案:

答案 0 :(得分:10)

您的陈述未执行,因为您未使用;正确终止这些陈述。

引用from the manual

  

命令由一系列令牌组成,以分号结束(&#34 ;;")。

并在the manual for psql:

  

在提示符下,用户可以键入SQL命令。通常,当到达命令终止分号时,输入行被发送到服务器。行尾不会终止命令。因此,为了清楚起见,命令可以分布在多条线上。如果命令的发送和执行没有错误,则命令的结果将显示在屏幕上。

如果你这样做,你会得到这样的输出:

psql (9.4.4)
Type "help" for help.

postgres=# CREATE ROLE testuser;
CREATE ROLE  ---<<<< this tells you the statement was executed

postgres=#

答案 1 :(得分:0)

我不知道postgres客户端是否在OSX中使用其他命令,因为它在Linux中,但我认为它是相同的。

docs link显示了postgres客户端的一些选项:

似乎“\ l”列出了数据库,而您希望看到的选项是角色及其访问权限,即“\ du”。

从客户端创建数据库时,您应该以“CREATING DATABASE”的形式获得响应。也许你有某种语法错误?

我不认为用户是在其他地方创建的。

我希望这可以解决你的一些问题。