我在使用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来做到这一点。
发布于 2017-11-01 07:45:58
当您登录(psql template1或psql template0)到template1和template0数据库并使用下面的命令退出时,就会出现此问题。
Ctrl + z
更好的方法是从db中找到postgres命令下面的use,这样问题就不会产生:
\q +输入
有两个解决方案,如果有问题。
解决方案- 1
重新启动posgres服务,类似于。
sudo服务postgresql重新启动
解决方案- 2
sudo aux grep template1
确保不删除此进程
postgres 8363 0.0 0.0 111760 7832 pt/11 T 09:49 0:00 /usr/lib/postgresql/9.5/bin/psql template1 ankit 18119 0.0 14224 976 pt/14 S+ 12:33 0:00 grep -color=autotemplate1
进程的其余部分应该使用下面的命令终止。
数独杀戮-9
现在再次尝试创建db。
希望这能帮到你。
安吉·H·甘地。
发布于 2017-11-07 10:28:54
只需重新启动数据库服务。
https://stackoverflow.com/questions/4977171
复制相似问题