首页 > 解决方案 > 运行 mix ecto.create 命令以在 Phoenix 项目中使用 brew 安装的 postgresql 创建数据库

问题描述

我已经使用包管理器(brew)安装了 postgres。在后台启动服务并运行它以在 Phoenix 上创建数据库后,出现此错误:

dedeco@MacBook-Pro-Dedeco> mix ecto.create                                                                                            

23:57:56.112 [error] GenServer #PID<0.242.0> terminating
** (Postgrex.Error) FATAL 28000 (invalid_authorization_specification) role "postgres" does not exist
    (db_connection) lib/db_connection/connection.ex:87: DBConnection.Connection.connect/2
    (connection) lib/connection.ex:622: Connection.enter_connect/5
    (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
Last message: nil
State: Postgrex.Protocol
** (Mix) The database for Hello.Repo couldn't be created: killed

标签: macoselixirphoenix-frameworkelixir-mix

解决方案


如果您使用自制软件安装 Postgres,它可能是使用您的操作系统 (OS) USER 创建的 SUPERUSER,就像您的名字一样。

所以你需要一个 postgres 用户,你必须使用这些命令创建:

dedeco@MacBook-Pro-Dedeco> psql postgres                                                                                                              
psql (12.2)
Type "help" for help.

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 dedeco    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

postgres=# CREATE USER postgres SUPERUSER;
CREATE ROLE
postgres=#

另一种选择是更改文件中的 postgres 用户config/dev.exs(或 prod.exs,这取决于您是哪个环境),如下所示:

# Configure your database
config :hello, Hello.Repo,
  username: "<USER_NAME>",
  password: "<PASSWORD>",
  database: "hello_dev",
  hostname: "localhost",
  show_sensitive_data_on_connection_error: true,
  pool_size: 10

推荐阅读