macos - 运行 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
解决方案
如果您使用自制软件安装 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
推荐阅读
- javascript - 通过根组件中的 React Context 传递 Redux 存储是否正确?
- java - 无法通过 Java API 在 Rally 中更新用户故事
- c# - 如何在实时图表中隐藏背景网格线?
- kubernetes - Openshift:获取当前的 pod 名称
- python - Python中的正则表达式
- android - Android更改edittext的默认“粘贴”弹出文本颜色
- amazon-web-services - AWS ECS - 在一个 ALB 中注册多个 ECS 集群
- git - 让 Git 日志统计数据有自己的列?
- android - Flutter 应用程序:导航到下一个屏幕时需要终止屏幕
- python - 为什么 numpy 1.14 轮 float16 65504 到 65500