ruby-on-rails - PGError: 错误:其他用户正在访问源数据库"template1"

  显示原文与译文双语对照的内容
0 0

我在测试使用PostgreSQL和 Rails 3时遇到 Having 问题。

开发和生产数据库都可以正常工作,但是在运行 rake 或者 db:test:prepare 时,测试数据库会抛出以下错误。

PGError: 错误:其他用户正在访问源数据库"template1"

更新

围绕着 google,在使用createdb创建新数据库时,似乎应该使用 template0 而不是 template1 。 在典型的"我将移除。 但不是症状fashion我发现 vendor/rails/railities/lib/task/databases.rake 并将第 109行改为:


createdb #{enc_option} 
-U"#{abcs["test"]["username"]}" 
-T template0 #{abcs["test"]["database"]}

但是我不想这样做,因为我使用 Rails 作为 gem,任何一个都知道其他的工作或者修复?

database.yml:


development:
 adapter: postgresql
 encoding: unicode
 database: test1234_development
 pool: 5
 username: holden
 password: postgres

test:
 adapter: postgresql
 encoding: unicode
 database: test1234_test
 pool: 5
 username: holden
 password: postgres

完全错误:

注意:数据库"test1234_test"不存在,正在跳过
PGError: 错误:其他用户正在访问源数据库"template1"
详细信息:有 1个其他会话使用数据库。
:创建数据库"test1234_test"编码=''

时间: 原作者:

0 0

短篇小说: CREATE DATABASE 通过复制现有数据库来工作。 如果其他会话连接到数据库,PostgreSQL将不允许你复制数据库。 如果其他用户正在访问 template1,则 CREATE DATABASE 将失败。

你需要回答的问题: 为什么其他会话连接到 template1?

template0与 template1的差异

在初始化数据库集群时,template0和template1是相同的。 你希望使用 CREATE DATABASE 创建的每个数据库都可以使用的任何特定的位置都应该进入 template1. 例如如果将程序 langauge pl/python 添加到template1中,稍后创建的每个数据库都将包括 pl/python 。

数据库template0是一个"virgin"模板。 它应该只包含通过初始化集群创建的标准数据库 objects--the 。 作为一个"virgin"模板,永远不应该改变它。 从不。

如果需要指定编码和区域设置设置( 排序规则),那么可以通过复制 template0. 你不能复制 template1.

0 0

在运行默认的Ruby on Rails 服务器WEBrick时,我还在尝试重置数据库时遇到这里错误:


$ bin/rake db:reset
PG::Error: ERROR: database"dev" is being accessed by other users
DETAIL: There is 1 other session using the database.
: DROP DATABASE IF EXISTS"dev"

这里的另一个用户是运行的Rails 应用程序。 关闭服务器后CTRL + c我能够重新运行数据库重置命令没有任何问题。

它也有意义。如果其他人当前连接到它,那么你可以 NOT 删除数据库,因为 Mike Sherrill也指出了

原作者:
...