Запуск команды mix ecto.create для создания базы данных в проекте Phoenix с postgresql, установленным brew - PullRequest
1 голос
/ 28 февраля 2020

Я установил postgres с помощью менеджера пакетов (brew). После запуска службы в качестве фона и запуска этой программы для создания базы данных в 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

1 Ответ

1 голос
/ 28 февраля 2020

Если вы установили Postgres с помощью homebrew, вероятно, он был создан как 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, это зависит от того, какой вы env) следующим образом:

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