This command seems to always fail
MIX_ENV=prod mix ecto.reset
The database for ContExp.Repo couldn't be dropped: ERROR 55006 (object_in_use) cannot drop the currently open database
I just tried this in the dev environment and it worked, I restarted the shell, and have no web pages running.
Is the production env itself keeping the db open in a way that prohibits dropping it?
It seems we are not supposed to drop dbs in prod, perhaps db configs are discarded between different product versions?
Would appreciate some light on this. I’ll also be reviewing the docs for clues.
EDIT: MIX_ENV=prod mix ecto.drop --force-drop
also yields the same connection error (despite being used for the sake of ignoring connections).
This is a postgres question not an ecto one. That error is postgres telling you that you cannot drop a db while other concurrent connections to the database exist. Stop those other connections and the drop should start working.
Though I’d argue that these kind of operations should generally not be done through mix commands in a production environment. Imo it’s better to use a limited user account with the application, preventing it doing any harmful operations on accident. One off tasks like deletion of a db then happen on the side using some admin credentials independently from the application.
2 Likes
I don’t know if this is the right way to do it but
MIX_EVN=prod mix ecto.rollback --all
…is a quite sufficient compromise for me (perhaps not even a compromise at all)