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的进程,就可以开始了。
如果仍然无法删除数据库,也无法调用可能正在使用数据库的内容。尝试强制删除数据库。请参阅此处如何强制删除数据库。
您需要关闭可能正在使用数据库的所有进程。在您的情况下,它很可能是彪马,您可以通过运行
如果您仍然不能删除数据库,那么可能还有其他进程留在那里,因此请查看EDOCX1的输出(1),以查找仍然可以保持连接的任何内容(例如,如果您使用sidekiq、elasticsearch等)。然后,您可以通过发出带有进程ID的