首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails + Postgres丢弃错误:其他用户正在访问数据库

Rails + Postgres丢弃错误:其他用户正在访问数据库
EN

Stack Overflow用户
提问于 2010-03-03 16:37:46
回答 17查看 66.6K关注 0票数 98

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

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

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

我通过Vlad运行的命令是:

代码语言:javascript
复制
rake RAILS_ENV='test_server' db:drop db:create

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

代码语言:javascript
复制
ActiveRecord::StatementInvalid: PGError: ERROR: database <database_name> is being accessed by other users DROP DATABASE IF EXISTS <database_name>

如果有人最近通过web访问过应用程序,就会发生这种情况(postgres会打开一个“会话”)

有没有办法终止postgres DB上的会话?

谢谢。

编辑

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

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

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2011-04-22 07:06:39

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

代码语言:javascript
复制
# 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

取消rails下的连接有时会导致下一次您尝试加载页面时它会吐出,但再次重新加载它会重新建立连接。

票数 82
EN

Stack Overflow用户

发布于 2016-10-02 10:06:16

更简单、更新的方法是: 1.使用ps -ef | grep postgres查找连接# 2. sudo kill -9 "# of the connection

注:可能存在相同的PID。杀一个人就杀了所有人。

票数 47
EN

Stack Overflow用户

发布于 2012-06-19 05:55:23

这里有一个快速的方法,可以杀死所有到postgres数据库的连接。

代码语言:javascript
复制
sudo kill -9 `ps -u postgres -o pid` 

警告:这将杀死postgres用户打开的所有正在运行的进程,因此请确保首先执行此操作。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2369744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档