我正在尝试删除我的生产postgresql数据库,但显然,有一些进程阻止了我。我在Ubuntu 14.04上使用nginx和puma在DigitalOcean中主持。
我在控制台中尝试的代码:
RAILS_ENV =生产包exec rails db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK = 1
我得到的错误:
PG::ObjectInUse: ERROR: database "****_production" is being accessed by other users
DETAIL: There are 5 other sessions using the database.
/home/deploy/sites/***/shared/bundle/ruby/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:98:in `async_exec'
知道如何停止所有进程并重置数据库吗?
答案 0 :(得分:0)
您需要关闭可能正在使用数据库的所有进程。在您的情况下,它最有可能是Puma,您可以通过运行pumactl stop
来停止。
如果您仍然无法删除自己的数据库,则可能还有其他进程,因此请查看ps aux
的输出,以查找仍可保留连接的任何内容(例如,如果您有'重新使用Sidekiq,Elasticsearch等)。然后,您可以通过发出带有进程ID的kill
命令来终止这些命令。
答案 1 :(得分:0)
看起来你的puma仍在运行,它正在使用postgresql连接。 停止可能使用数据库连接的所有进程后再次尝试。同时关闭您在服务器上打开的任何rails控制台。
ps -aef | grep puma
这将为您提供服务器上运行的puma进程列表。您可以从那里获取进程ID(PID)并使用下面的方法来终止进程。
sudo kill -9 PID
不要忘记用实际进程ID替换PID。一旦你停止了可能使用postgresql的所有进程,你就可以了。
如果仍然无法删除数据库,也无法回忆可能正在使用数据库的内容。尝试强制删除数据库。请参阅here如何强行删除数据库。