Ruby on Rails强制重置数据库,其他用户用Postgres改写,如何操作?

2026-04-11 17:032阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计524个文字,预计阅读时间需要3分钟。

Ruby on Rails强制重置数据库,其他用户用Postgres改写,如何操作?

在尝试执行 Rails 和 Postgres 的数据库操作时,遇到以下错误:drop error: database is being accessed by other users。以下是一些可能的方法来解决这个问题,无需强制关闭数据库:

1. 确认是否有其他用户正在连接到数据库。

2.如果可能,请通知其他用户暂时断开连接。

Ruby on Rails强制重置数据库,其他用户用Postgres改写,如何操作?

3.使用 `psql` 命令行工具,尝试使用 `pg_terminate_backend` 命令强制断开连接。

4.检查是否有其他应用程序或脚本正在访问数据库。

5.确保数据库服务器的配置允许并发连接。

例如,使用 `psql` 断开特定进程的方法如下:

sh

ps aux | grep postgres

找到正在运行的进程 ID,然后使用以下命令:

shpg_terminate_backend

请确保在执行上述操作时,您有足够的权限。

参见英文答案 > Rails + Postgres drop error: database is being accessed by other users13个
有没有办法强制数据库重置,即使Postgres有其他用户使用它.当我尝试$rake db时,我几乎总是遇到这个错误:reset:

Couldn't drop example_database_name : #<ActiveRecord::StatementInvalid: PG::Error: ERROR: database "example_database_name" is being accessed by other users DETAIL: There are 2 other session(s) using the database. 如果您发现自己在开发中使用了db:reset,那么将它放在lib / database.rake文件中.

require 'active_record/connection_adapters/postgresql_adapter' module ActiveRecord module ConnectionAdapters class PostgreSQLAdapter < AbstractAdapter def drop_database(name) raise "Nah, I won't drop the production database" if Rails.env.production? execute <<-SQL UPDATE pg_catalog.pg_database SET datallowconn=false WHERE datname='#{name}' SQL execute <<-SQL SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '#{name}'; SQL execute "DROP DATABASE IF EXISTS #{quote_table_name(name)}" end end end end

显然只是设计用于非生产数据库.它将导致所有现有数据库连接被切断,因此如果unicorn / passenger / pow正在汇集数据库连接,则下一页加载可能会出错.如果发生这种情况,简单的页面刷新将导致服务器打开一个新连接,一切都会很好.

本文共计524个文字,预计阅读时间需要3分钟。

Ruby on Rails强制重置数据库,其他用户用Postgres改写,如何操作?

在尝试执行 Rails 和 Postgres 的数据库操作时,遇到以下错误:drop error: database is being accessed by other users。以下是一些可能的方法来解决这个问题,无需强制关闭数据库:

1. 确认是否有其他用户正在连接到数据库。

2.如果可能,请通知其他用户暂时断开连接。

Ruby on Rails强制重置数据库,其他用户用Postgres改写,如何操作?

3.使用 `psql` 命令行工具,尝试使用 `pg_terminate_backend` 命令强制断开连接。

4.检查是否有其他应用程序或脚本正在访问数据库。

5.确保数据库服务器的配置允许并发连接。

例如,使用 `psql` 断开特定进程的方法如下:

sh

ps aux | grep postgres

找到正在运行的进程 ID,然后使用以下命令:

shpg_terminate_backend

请确保在执行上述操作时,您有足够的权限。

参见英文答案 > Rails + Postgres drop error: database is being accessed by other users13个
有没有办法强制数据库重置,即使Postgres有其他用户使用它.当我尝试$rake db时,我几乎总是遇到这个错误:reset:

Couldn't drop example_database_name : #<ActiveRecord::StatementInvalid: PG::Error: ERROR: database "example_database_name" is being accessed by other users DETAIL: There are 2 other session(s) using the database. 如果您发现自己在开发中使用了db:reset,那么将它放在lib / database.rake文件中.

require 'active_record/connection_adapters/postgresql_adapter' module ActiveRecord module ConnectionAdapters class PostgreSQLAdapter < AbstractAdapter def drop_database(name) raise "Nah, I won't drop the production database" if Rails.env.production? execute <<-SQL UPDATE pg_catalog.pg_database SET datallowconn=false WHERE datname='#{name}' SQL execute <<-SQL SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '#{name}'; SQL execute "DROP DATABASE IF EXISTS #{quote_table_name(name)}" end end end end

显然只是设计用于非生产数据库.它将导致所有现有数据库连接被切断,因此如果unicorn / passenger / pow正在汇集数据库连接,则下一页加载可能会出错.如果发生这种情况,简单的页面刷新将导致服务器打开一个新连接,一切都会很好.