【问题标题】:PostgreSQL can't create user [duplicate]PostgreSQL 无法创建用户 [重复]
【发布时间】:2015-08-21 19:26:28
【问题描述】:

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

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

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 的,从哪里安装的?
  • 谢谢,就这么简单,需要 ; (必须少做python,多做sql/javascript;实践)

标签: postgresql psql


【解决方案1】:

您的语句未执行,因为您没有使用 ; 正确终止它们。

引用from the manual

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

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=#

【讨论】:

    【解决方案2】:

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

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

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

    从客户端创建数据库时,您应该得到“正在创建数据库”形式的响应。也许您遇到了某种语法错误?

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

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

    【讨论】:

    • 谢谢 \qu 帮助确认有哪些用户(你是对的 \l 是数据库)。我仍然在创建用户时遇到问题。如果我通过createuser从shell(bash)创建用户,这可以工作,但如果创建则不会确认(仅在出现错误时)。如果我通过 postgres cli 执行此操作,则 createuser 不起作用(并且没有给出错误消息)并且 CREATE ROLE 名称 - 也不起作用(并且也没有给出错误消息); (注意没有在其他地方提到的默认 postgres 角色/用户创建 - 这只是在 Linux 上 - OSX 上的默认用户似乎是 shell 用户)
    • 更新了我的问题以更清楚 - 仍然无法在 2 台不同的计算机上创建用户或数据库作为相同的问题。
    猜你喜欢
    • 2023-03-11
    • 2015-11-05
    • 1970-01-01
    • 2022-01-21
    • 2021-05-05
    • 2017-03-09
    • 2021-08-11
    • 2020-04-18
    • 1970-01-01
    相关资源
    最近更新 更多