【发布时间】:2018-08-05 02:16:21
【问题描述】:
我正在使用 Phoenix 和 PostgreSQL 构建一个 RESTful API,并使用 docker-compose 在单独的 docker 容器中运行 Phoenix 应用程序和数据库。如果我将外壳附加到 Phoenix 容器并键入 mix ecto.reset 以重置数据库,则会收到以下错误:
** (Mix) The database for Home.Repo couldn't be dropped: ERROR 55006 (object_in_use):
database "home" is being accessed by other users
There are 10 other sessions using the database.
我已经试过了:
REVOKE CONNECT ON DATABASE dbname FROM PUBLIC, username;
SELECT
pg_terminate_backend(pid)
FROM
pg_stat_activity
WHERE
pid <> pg_backend_pid()
AND datname = 'database_name';
我做错了什么?
【问题讨论】:
-
可能
cowboy持有一个与您的数据库的连接池。尝试在重置数据库之前停止它。 -
@NicNilov 你是对的,我停止了 Phoenix 容器并尝试使用 DROP DATABASE 从 postgres 容器中手动删除数据库并且它有效。但是我怎样才能只停止 Phoenix 内的牛仔网络服务器容器,所以我可以使用 mix ecto.reset?
-
在运行
mix ecto.reset之前,您必须从容器的shell 中终止您的beam进程,然后使用mix phx.server重新启动服务器。
标签: postgresql docker elixir phoenix-framework ecto