PostgreSQL无法创建用户。

8
问题:我可以从shell(bash,OSX)创建用户或数据库,但无法从postgres cli中创建。从bash中,如果成功,我没有得到任何确认。
如果我尝试在psql中创建角色,则不会收到任何响应,也不会生成任何错误。如果我尝试从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    |                                                | {}

你是如何安装PostgreSQL的?从哪里下载的? - Craig Ringer
谢谢,就这么简单,需要加上分号(必须多练习SQL/JavaScript加分号,少练习Python)。 - Yunti
2个回答

31

因为您没有使用分号;正确地终止语句,所以它们不会被执行。

引用自手册

命令由一系列标记组成,以分号(“;”)结尾。

psql手册中:

在提示符处,用户可以输入SQL命令。通常,当到达终止命令的分号时,输入行将被发送到服务器。换行符不会终止命令。因此,为了清晰起见,命令可以跨多行分布。如果命令已发送并无错误地执行,则命令的结果将显示在屏幕上。

如果遵循这种方式,将会得到以下输出:

psql (9.4.4)
Type "help" for help.

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

postgres=#

0

我不知道Postgres客户端在OSX中是否使用了其他命令,就像在Linux中一样,但是我假设它是一样的。

这个文档链接展示了Postgres客户端的一些选项:

似乎"\l"会列出数据库,而你希望查看的选项是角色及其权限,可以用"\du"。

当你在客户端内创建数据库时,应该会得到一个类似"CREATING DATABASE"的响应。也许你遇到了某种语法错误?

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

希望这能解决你的一些问题。


感谢\qu帮助确认用户(您是正确的\l是数据库)。但我仍然在创建用户方面遇到问题。如果我通过createuser从shell(bash)创建用户,则可以成功,但不会给出任何确认信息(只有错误信息)。如果我通过postgres cli进行此操作,则createuser无法工作(也没有错误消息),CREATE ROLE name也无法工作(也没有错误消息);(请注意,在其他地方没有提到创建默认postgres角色/用户-这只是在Linux上吗?OSX上的默认用户似乎是shell用户) - Yunti
我更新了问题以使其更清晰 - 在两台不同的计算机上仍然无法创建用户或数据库。 - Yunti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接