我登录到源数据库template1,现在我无法创建数据库。 当我尝试创建数据库时,我收到此错误:
OperationalError: source database "template1" is being accessed by other users
DETAIL: There are 5 other session(s) using the database.
每次登录template1时,我都会使用'exit'命令注销,但正如您所看到的,它不会注销,每次登录时会话数都会增加。有没有办法强制断开与现在登录的template1的每个连接?
答案 0 :(得分:34)
数据库template1
仅用于提供准系统结构以创建另一个空数据库。你应该从不登录template1
,否则你会遇到问题。
对您而言,最简单的解决方案是重新启动PostgreSQL服务器进程,然后再次登录。应该始终存在并且可以安全登录的数据库是postgres
。
如果无法重新启动,则可以使用其他紧急模板数据库:template0
。
默认情况下,此语句:
CREATE DATABASE dbname;
相当于:
CREATE DATABASE dbname TEMPLATE template1;
如果template1
不可用或已损坏,您可以使用template0
作为最后的手段:
CREATE DATABASE dbname TEMPLATE template0;
您可以阅读有关模板数据库here的更多信息。
答案 1 :(得分:26)
这帮助我解决了我的问题:
SELECT *, pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE usename='username';
--Use pid if PostgreSQL version 9.2 or above.
我终止了与template1的所有活动连接,并且可以正常创建数据库
答案 2 :(得分:9)
To solve this, I have to disconnect the database connection from the pgAdmin III.
答案 3 :(得分:6)
您还可以尝试通过终端
终止当前进程线程搜索流程:
sudo ps aux | grep template1
杀死进程:
sudo kill -9<您的流程ID>
答案 4 :(得分:2)
我有一个连接到数据库并对其执行各种操作的脚本,有些要求没有其他人登录。我修改了@Andrius的答案,不是终止我的脚本连接,而是终止其他人的:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();
来自docs:pg_backend_pid()
是附加到当前会话的服务器进程的进程ID。
答案 5 :(得分:2)
答案 6 :(得分:1)
当您在template1和template0数据库中记录( psql template1 或 psql template0 )并使用以下命令退出时,会出现此问题。
Ctrl + z
从postgres命令下面的db使用更好的方法然后问题不会创建:
\ q +输入
有两个解决方案,如果有问题。
解决方案 - 1
重新启动posgres服务,例如。
sudo service postgresql restart
解决方案 - 2
sudo ps aux | grep template1
确保不要删除此流程
postgres 8363 0.0 0.0 111760 7832 pts / 11 T 09:49 0:00 /usr/lib/postgresql/9.5/bin/psql template1 ankit 18119 0.0 0.0 14224 976 pts / 14 S + 12:33 0:00 grep --color = auto template1
应使用以下命令杀死其余进程。
sudo kill -9
现在尝试再次创建数据库。
希望这对你有所帮助。
Ankit H Gandhi。
答案 7 :(得分:1)
答案 8 :(得分:0)
在Windows上,我不得不重新安装PostgreSQL,重新启动没有帮助。
答案 9 :(得分:0)
如果转到侧面板,浏览器,服务器,数据库,则右边是数据库的摘要...请注意,这里有按右键并找到下拉列表以删除数据库,因此如果可以,删除现有数据库,然后创建一个新数据库,以便您可以声明新创建数据库的所有权。
答案 10 :(得分:0)
我遇到了同样的问题,但是在谷歌搜索之后,我了解到我已经与( postgis_30_sample )数据库(我要从中复制的模板)建立了连接。当我在Geo Server应用程序中创建一些商店时,此连接是由 GeoServer 创建的。
答案 11 :(得分:0)
我在以下方面有同样的问题: 错误:其他用户正在访问源数据库“ template1” 详细信息:使用该数据库还有另外1个会话。
我通过在PostgreSQL 13的左栏中单击显示了一些图形的表格来解决了postgreSQL 13中的问题。我对服务器活动表感兴趣,在这里我找到了一行,其中包含单词template1,并用叉将其关闭,然后在此处重新启动应用程序,一切正常。
答案 12 :(得分:0)
如果您使用 pgadmin4 或类似工具,请确保它本身在执行create database
或已关闭。
我已经使用pgadmin4生成了create database
,然后使用其脚本功能导出了所使用的脚本,然后对其进行了复制和更改,以将其放入自己的自动化脚本中。
问题是活动网页pgadmin最终以某种方式终止在数据库template1
上。
停止并重新启动服务器本身并不能解决任何问题,pgadmin非常聪明,可以在服务器恢复后立即重新连接到服务器。
答案 13 :(得分:0)
如果您使用的是Docker,则必须在sequelize配置中将host设置为“ 0.0.0.0”,而不是“ localhost”。
答案 14 :(得分:-1)
您可以尝试重新启动在后台运行的postgresql服务。
答案 15 :(得分:-1)
我通过重新连接到服务器(pgAdmin->断开连接->连接)解决了这样的问题