ruby-on-rails - Rails + Postgres 丢弃错误 : database is being accessed by other users

标签 ruby-on-rails postgresql

我有一个运行在 Postgres 上的 Rails 应用程序。

我有两台服务器:一台用于测试,另一台用于生产。

我经常需要在测试服务器上克隆生产数据库。

我通过 Vlad 运行的命令是:

rake RAILS_ENV='test_server' db:drop db:create

我遇到的问题是收到以下错误:

ActiveRecord::StatementInvalid: PGError: ERROR: database <database_name> is being accessed by other users DROP DATABASE IF EXISTS <database_name>

如果有人最近通过网络访问应用程序(postgres 保持“ session ”打开),就会发生这种情况

有什么方法可以终止 postgres 数据库上的 session ?

谢谢。

编辑

我可以使用 phppgadmin 的界面删除数据库,但不能使用 rake 任务。

如何用 rake 任务复制 phppgadmin 的 drop?

最佳答案

如果您为您的应用程序终止了正在运行的 postgresql 连接,那么您就可以运行 db:drop 了。那么如何杀死这些连接呢?我使用以下 rake 任务:

# lib/tasks/kill_postgres_connections.rake
task :kill_postgres_connections => :environment do
  db_name = "#{File.basename(Rails.root)}_#{Rails.env}"
  sh = <<EOF
ps xa \
  | grep postgres: \
  | grep #{db_name} \
  | grep -v grep \
  | awk '{print $1}' \
  | xargs kill
EOF
  puts `#{sh}`
end

task "db:drop" => :kill_postgres_connections

从 under rails 中删除连接有时会导致它在您下次尝试加载页面时出现故障,但再次重新加载它会重新建立连接。

关于ruby-on-rails - Rails + Postgres 丢弃错误 : database is being accessed by other users,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2369744/

相关文章:

javascript - 条件隐藏字段标签 - Rails

sql - 将 SQL 结果拆分为最大大小 = n 的组

sql - Postgresql 检查字符串是否包含多个字母

java - 从 Postgres 获取的日期不正确

postgresql - 在 SQLKorma 中表达(参数化)对 Postgres 的任何(数组)查询

function - PL/pgSQL 触发器功能无法正常工作

ruby-on-rails - rails to_xlsx 无法找到 'id' : (all, {} 的所有漏洞(找到 0 个结果,但正在寻找 2 个)

ruby-on-rails - 修复此错误:NameError(未初始化的常量 ActiveRecord::ConnectionAdapters::Mysql2Adapter::Column)

ruby-on-rails - 如何在 Ruby 中获取 Singleton 实例变量的克隆值?

ruby-on-rails - 异常通知缺少rack.input