关于rails上的ruby:删除数据库,postgresql

Drop database, postgresql

我正在尝试删除我的生产PostgreSQL数据库,但显然有一些进程阻止了我。我在Ubuntu 14.04的DigitalOcean和Nginx和Puma一起主持。

我在控制台中尝试的代码:

RAILS_ENV=production bundle exec rails db:drop
DISABLE_DATABASE_ENVIRONMENT_CHECK=1

我得到的错误是:

1
2
3
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'

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


看起来您的puma仍在运行,它正在使用postgresql连接。在停止可能使用数据库连接的所有进程后重试。同时关闭任何在服务器上打开的Rails控制台。

1
ps -aef | grep puma

这将为您提供服务器上运行的Puma进程的列表。您可以从中获取进程ID(PID),并使用下面的代码终止进程。

1
sudo KILL -9 PID

不要忘记用实际进程ID替换PID。一旦停止所有可能使用PostgreSQL的进程,就可以开始了。

如果仍然无法删除数据库,也无法调用可能正在使用数据库的内容。尝试强制删除数据库。请参阅此处如何强制删除数据库。


您需要关闭可能正在使用数据库的所有进程。在您的情况下,它很可能是彪马,您可以通过运行pumactl stop来停止。

如果您仍然不能删除数据库,那么可能还有其他进程留在那里,因此请查看EDOCX1的输出(1),以查找仍然可以保持连接的任何内容(例如,如果您使用sidekiq、elasticsearch等)。然后,您可以通过发出带有进程ID的kill命令来终止这些操作。