连接失败:** (Postgrex.Error) FATAL (invalid_catalog_name): 数据库 "api_example_dev" 不存在
failed to connect: ** (Postgrex.Error) FATAL (invalid_catalog_name): database "api_example_dev" does not exist
我正在使用 Phoenix 创建一个简单的 API Rest。
执行命令时出现以下错误:mix ecto.migrate
22:25:14.197 [error] Postgrex.Protocol (#PID<0.193.0>) failed to connect: ** (Postgrex.Error) FATAL (invalid_catalog_name): database "api_example_dev" does not exist
** (DBConnection.ConnectionError) connection not available because of disconnection
(db_connection) lib/db_connection.ex:934: DBConnection.checkout/2
(db_connection) lib/db_connection.ex:750: DBConnection.run/3
(db_connection) lib/db_connection.ex:1141: DBConnection.run_meter/3
(db_connection) lib/db_connection.ex:592: DBConnection.prepare_execute/4
(ecto) lib/ecto/adapters/postgres/connection.ex:91: Ecto.Adapters.Postgres.Connection.execute/4
(ecto) lib/ecto/adapters/sql.ex:235: Ecto.Adapters.SQL.sql_call/6
(ecto) lib/ecto/adapters/sql.ex:185: Ecto.Adapters.SQL.query!/5
(ecto) lib/ecto/adapters/postgres.ex:71: Ecto.Adapters.Postgres.execute_ddl/3
(ecto) lib/ecto/migrator.ex:43: Ecto.Migrator.migrated_versions/2
(ecto) lib/ecto/migrator.ex:142: Ecto.Migrator.run/4
(ecto) lib/mix/tasks/ecto.migrate.ex:84: anonymous fn/4 in Mix.Tasks.Ecto.Migrate.run/2
(elixir) lib/enum.ex:737: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:737: Enum.each/2
(mix) lib/mix/task.ex:314: Mix.Task.run_task/3
(mix) lib/mix/cli.ex:80: Mix.CLI.run_task/2
(elixir) lib/code.ex:677: Code.require_file/2
当我 运行 'mix test' 时,我得到:
Generated api_example app
** (Mix) The database for ApiExample.Repo couldn't be created: exited in: :gen_server.call(#PID<0.2449.0>, {:checkout, #Reference<0.2107810362.96468993.2762>, true, 15000}, 5000)
** (EXIT) time out
22:24:29.587 [error] Task #PID<0.2448.0> started from #PID<0.74.0> terminating
** (stop) exited in: :gen_server.call(#PID<0.2449.0>, {:checkout, #Reference<0.2107810362.96468993.2762>, true, 15000}, 5000)
** (EXIT) time out
(db_connection) lib/db_connection/connection.ex:54: DBConnection.Connection.checkout/2
(db_connection) lib/db_connection.ex:928: DBConnection.checkout/2
(db_connection) lib/db_connection.ex:750: DBConnection.run/3
(db_connection) lib/db_connection.ex:1141: DBConnection.run_meter/3
(db_connection) lib/db_connection.ex:592: DBConnection.prepare_execute/4
lib/ecto/adapters/postgres/connection.ex:91: Ecto.Adapters.Postgres.Connection.execute/4
lib/ecto/adapters/postgres.ex:203: anonymous fn/2 in Ecto.Adapters.Postgres.run_query/2
(elixir) lib/task/supervised.ex:88: Task.Supervised.do_apply/2
Function: #Function<4.100334649/0 in Ecto.Adapters.Postgres.run_query/2>
文件config/dev.exs:
# Configure your database
config :api_example, ApiExample.Repo,
adapter: Ecto.Adapters.Postgres,
username: "postgres",
password: "postgres",
database: "api_example_dev",
hostname: "localhost",
pool_size: 10
您需要 运行 mix ecto.create
,因为现在没有要迁移的数据库。完成后,您可以 运行 mix ecto.migrate
它将执行迁移。要查看所有混合命令的列表,请使用 mix help
。以下是当前可用的 ecto 任务列表:
mix ecto # Prints Ecto help information
mix ecto.create # Creates the repository storage
mix ecto.drop # Drops the repository storage
mix ecto.dump # Dumps the repository database structure
mix ecto.gen.migration # Generates a new migration for the repo
mix ecto.gen.repo # Generates a new repository
mix ecto.load # Loads previously dumped database structure
mix ecto.migrate # Runs the repository migrations
mix ecto.migrations # Displays the repository migration status
mix ecto.rollback # Rolls back the repository migrations
如果您使用的是 postgresql,如果以上内容不清楚,您可以安全地假设术语 repository storage
表示 database
。
如果mix ecto.create
失败,则意味着postgresql 未运行ning 或未安装。
要查看它是否 运行ning,请尝试:
ps auxwww | grep postgres
您应该会看到如下内容:
username 952 0.0 0.0 2656344 388 ?? S 19Apr18 0:47.05 /Applications/Postgres.app/Contents/Versions/9.6/bin/postgres -D /Users/username/Library/Application Support/Postgres/var-9.6
如果没有(请参阅与上述类似的内容),则需要启动或安装它(如果没有)。
在 MacOS 上,我强烈推荐 Heroku 的 PostgresApp (https://postgresapp.com/) 而不是自制软件或系统 postgresql。
如果您在评论中告诉我 OS 如果上述方法不起作用,我会用 OS 说明更新我的答案。
我正在使用 Phoenix 创建一个简单的 API Rest。 执行命令时出现以下错误:mix ecto.migrate
22:25:14.197 [error] Postgrex.Protocol (#PID<0.193.0>) failed to connect: ** (Postgrex.Error) FATAL (invalid_catalog_name): database "api_example_dev" does not exist
** (DBConnection.ConnectionError) connection not available because of disconnection
(db_connection) lib/db_connection.ex:934: DBConnection.checkout/2
(db_connection) lib/db_connection.ex:750: DBConnection.run/3
(db_connection) lib/db_connection.ex:1141: DBConnection.run_meter/3
(db_connection) lib/db_connection.ex:592: DBConnection.prepare_execute/4
(ecto) lib/ecto/adapters/postgres/connection.ex:91: Ecto.Adapters.Postgres.Connection.execute/4
(ecto) lib/ecto/adapters/sql.ex:235: Ecto.Adapters.SQL.sql_call/6
(ecto) lib/ecto/adapters/sql.ex:185: Ecto.Adapters.SQL.query!/5
(ecto) lib/ecto/adapters/postgres.ex:71: Ecto.Adapters.Postgres.execute_ddl/3
(ecto) lib/ecto/migrator.ex:43: Ecto.Migrator.migrated_versions/2
(ecto) lib/ecto/migrator.ex:142: Ecto.Migrator.run/4
(ecto) lib/mix/tasks/ecto.migrate.ex:84: anonymous fn/4 in Mix.Tasks.Ecto.Migrate.run/2
(elixir) lib/enum.ex:737: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:737: Enum.each/2
(mix) lib/mix/task.ex:314: Mix.Task.run_task/3
(mix) lib/mix/cli.ex:80: Mix.CLI.run_task/2
(elixir) lib/code.ex:677: Code.require_file/2
当我 运行 'mix test' 时,我得到:
Generated api_example app
** (Mix) The database for ApiExample.Repo couldn't be created: exited in: :gen_server.call(#PID<0.2449.0>, {:checkout, #Reference<0.2107810362.96468993.2762>, true, 15000}, 5000)
** (EXIT) time out
22:24:29.587 [error] Task #PID<0.2448.0> started from #PID<0.74.0> terminating
** (stop) exited in: :gen_server.call(#PID<0.2449.0>, {:checkout, #Reference<0.2107810362.96468993.2762>, true, 15000}, 5000)
** (EXIT) time out
(db_connection) lib/db_connection/connection.ex:54: DBConnection.Connection.checkout/2
(db_connection) lib/db_connection.ex:928: DBConnection.checkout/2
(db_connection) lib/db_connection.ex:750: DBConnection.run/3
(db_connection) lib/db_connection.ex:1141: DBConnection.run_meter/3
(db_connection) lib/db_connection.ex:592: DBConnection.prepare_execute/4
lib/ecto/adapters/postgres/connection.ex:91: Ecto.Adapters.Postgres.Connection.execute/4
lib/ecto/adapters/postgres.ex:203: anonymous fn/2 in Ecto.Adapters.Postgres.run_query/2
(elixir) lib/task/supervised.ex:88: Task.Supervised.do_apply/2
Function: #Function<4.100334649/0 in Ecto.Adapters.Postgres.run_query/2>
文件config/dev.exs:
# Configure your database
config :api_example, ApiExample.Repo,
adapter: Ecto.Adapters.Postgres,
username: "postgres",
password: "postgres",
database: "api_example_dev",
hostname: "localhost",
pool_size: 10
您需要 运行 mix ecto.create
,因为现在没有要迁移的数据库。完成后,您可以 运行 mix ecto.migrate
它将执行迁移。要查看所有混合命令的列表,请使用 mix help
。以下是当前可用的 ecto 任务列表:
mix ecto # Prints Ecto help information
mix ecto.create # Creates the repository storage
mix ecto.drop # Drops the repository storage
mix ecto.dump # Dumps the repository database structure
mix ecto.gen.migration # Generates a new migration for the repo
mix ecto.gen.repo # Generates a new repository
mix ecto.load # Loads previously dumped database structure
mix ecto.migrate # Runs the repository migrations
mix ecto.migrations # Displays the repository migration status
mix ecto.rollback # Rolls back the repository migrations
如果您使用的是 postgresql,如果以上内容不清楚,您可以安全地假设术语 repository storage
表示 database
。
如果mix ecto.create
失败,则意味着postgresql 未运行ning 或未安装。
要查看它是否 运行ning,请尝试:
ps auxwww | grep postgres
您应该会看到如下内容:
username 952 0.0 0.0 2656344 388 ?? S 19Apr18 0:47.05 /Applications/Postgres.app/Contents/Versions/9.6/bin/postgres -D /Users/username/Library/Application Support/Postgres/var-9.6
如果没有(请参阅与上述类似的内容),则需要启动或安装它(如果没有)。
在 MacOS 上,我强烈推荐 Heroku 的 PostgresApp (https://postgresapp.com/) 而不是自制软件或系统 postgresql。
如果您在评论中告诉我 OS 如果上述方法不起作用,我会用 OS 说明更新我的答案。