【问题标题】:Using Postgres Shell to createuser使用 Postgres Shell 创建用户
【发布时间】:2019-05-09 09:37:12
【问题描述】:

我正在学习书中的教程:

梅勒,安东尼奥Django 2 示例:从头开始构建功能强大且可靠的 Python Web 应用程序(Kindle 位置 1917-1918)。 包出版。 Kindle 版。

我在这部分:

  • 为您的博客添加全文搜索
    • 安装 PostgreSQL

我在 Windows 10 上,我安装了 Postgres 很好。说明说要输入 postgres shell

su postgres
createuser -dP blog

我想我正在尝试创建一个名为 blog 的用户,该用户将拥有密码并被允许创建数据库?

当我这样做时,我得到:

Server [localhost]: su postgres
Database [postgres]: createuser -dP blog
Port [5432]:
Username [postgres]:
psql: warning: extra command-line argument "postgres" ignored
psql: warning: extra command-line argument "-d" ignored
psql: warning: extra command-line argument "createuser" ignored
psql: warning: extra command-line argument "-dP" ignored
psql: warning: extra command-line argument "blog" ignored
psql: warning: extra command-line argument "-p" ignored
psql: warning: extra command-line argument "5432" ignored
psql: could not translate host name "su" to address: Unknown host
Press any key to continue . . .

我不确定该怎么做或到底发生了什么?指令很不清楚

【问题讨论】:

  • 这本书应该可以在任何操作系统上运行,我认为这只是作者的疏忽——它只是说要打开外壳。我可以使用 pgAdmin,并且我有一台使用 postgres 的 Mac,但我想知道 windows psql shell 发生了什么?

标签: django postgresql windows-10 psql


【解决方案1】:

您似乎正在尝试在 psql 中使用命令,su postgrescreateuser -dP blog,它们适用于类似 shell 的 bash。 su postgres 表示切换 postgres 操作系统用户,createuser 命令是创建数据库用户的 shell 命令。但是,如果您在 psql 中,则无法访问该命令。

当 psql 询问数据库连接信息时,您似乎也在输入这些命令,因此即使您向其发送 sql/psql 命令,它也无法在此时工作。

这是createuser 命令上的PostgreSQL Documentation。在系统 shell 中使用此命令创建数据库用户。

这是CREATE ROLE 上的PostgreSQL Documentation。这就是您在 psql 中创建用户的方式。

【讨论】:

    【解决方案2】:

    createuser 是从命令行给出的命令。由于您在 Windows 上,这意味着它是一个 .exe 文件,可能位于您安装 Postgres 的任何位置的 bin 目录中。在命令提示符或 powershell 提示符处使用 createuser -dP blog

    此外,您可能必须将-h localhost -p 5432 -U postgres -W password 提供给createuser.exe 以使其能够与服务器通信。

    【讨论】:

      【解决方案3】:

      我在阅读威廉·S·文森特 (William S. Vincent) 的 Django for Professionals 时所做的事情。

      点击 PostgreSQL 的安装后,它会要求您输入密码。类型:postgres 完成数据库安装后,转到项目的 settings.py,注释掉旧的:

      # DATABASES = {
      #     'default': {
      #         'ENGINE': 'django.db.backends.sqlite3',
      #         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
      #     }
      # }
      

      并粘贴文本:

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.postgresql',
              'NAME': 'postgres',
              'USER': 'postgres',
              'PASSWORD': 'postgres',
              'HOST': '127.0.0.1',
              'PORT': '5432',
          }
      }
      

      就是这样!我节省了你的时间!现在你欠我的!

      【讨论】:

      • PORT : 5432 and ENGINE:'django.db.backends.postgres_psycopg2' - 如果没有 psycopg2,您可能会遇到许多不需要的错误!
      猜你喜欢
      • 1970-01-01
      • 2018-12-07
      • 2019-04-01
      • 1970-01-01
      • 2020-07-04
      • 2019-03-05
      • 1970-01-01
      • 2012-02-17
      • 2015-07-02
      相关资源
      最近更新 更多