我在使用Postgresql和Rails 3的测试中遇到了问题。
无论是开发数据库还是生产数据库,我都可以很好地工作,但是当我运行rake或db:test:prepare等时,测试数据库会抛出以下错误。
PGError: ERROR:其他用户正在访问源数据库"template1“
更新
在谷歌搜索时,当使用createdb在Postgres中创建一个新的数据库时,似乎应该使用template0而不是template1。典型的“所以我会移除原因。但没有症状“时尚”,我找到了vendor/rails/railities/lib/task/databases.rake,并将第109行改为:
createdb #{enc_option} \
-U "#{abcs["test"]["username"]}" \
-T template0 #{abcs["test"]["database"]}但我真的不想这么做,因为我用Rails作为宝石,任何一个人都知道另一个工作是围绕或修复?
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“
详细信息:还有一个(或多个)使用数据库的会话。
:创建数据库"test1234_test“编码= 'unicode‘
发布于 2011-02-12 13:33:41
短篇小说:CREATE DATABASE通过复制现有数据库来工作。如果另一个会话连接到数据库,PostgreSQL将不允许您复制数据库。如果其他用户正在访问template1,则CREATE DATABASE将失败。
您需要回答的问题是:为什么其他会话与template1连接?
:template0与template1的区别
在初始化数据库集群时,template0和template1是相同的。您希望通过使用CREATE DATABASE创建的每个数据库都可以使用任何特定位置的内容,都应该进入template1。因此,例如,如果将过程langauge PL/python添加到template1中,那么以后创建的每个数据库都将包括PL/python。
数据库template0的目的是成为一个“处女地”模板。它应该只包含标准的数据库对象--那些通过初始化集群创建的对象。作为一个“处女”模板,它不应该被改变。绝不可能。
如果需要指定编码和区域设置(排序规则),则可以通过复制template0来实现。您不能通过复制template1来做到这一点。
https://stackoverflow.com/questions/4977171
复制相似问题