删除数据库,postgresql

时间:2017-02-03 17:12:07

标签: ruby-on-rails postgresql nginx

我正在尝试删除我的生产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'

知道如何停止所有进程并重置数据库吗?

2 个答案:

答案 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如何强行删除数据库。