postgresql - 无法创建数据库 - OperationalError:其他用户正在访问源数据库“template1”

时间:2013-01-17 08:18:05

标签: postgresql postgresql-8.4

我登录到源数据库template1,现在我无法创建数据库。 当我尝试创建数据库时,我收到此错误:

OperationalError: source database "template1" is being accessed by other users
DETAIL:  There are 5 other session(s) using the database.

每次登录template1时,我都会使用'exit'命令注销,但正如您所看到的,它不会注销,每次登录时会话数都会增加。有没有办法强制断开与现在登录的template1的每个连接?

16 个答案:

答案 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();

来自docspg_backend_pid()是附加到当前会话的服务器进程的进程ID。

答案 5 :(得分:2)

如果您使用的是 PgAdminn,您可以手动设置图像中提供的定义。

enter image description here

答案 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)

  1. 输入pgAdmin
  2. 右键单击服务器
  3. 断开服务器连接
  4. 再次连接服务器
  5. 做您想做的事

答案 8 :(得分:0)

在Windows上,我不得不重新安装PostgreSQL,重新启动没有帮助。

答案 9 :(得分:0)

如果转到侧面板,浏览器,服务器,数据库,则右边是数据库的摘要...请注意,这里有按右键并找到下拉列表以删除数据库,因此如果可以,删除现有数据库,然后创建一个新数据库,以便您可以声明新创建数据库的所有权。

答案 10 :(得分:0)

我遇到了同样的问题,但是在谷歌搜索之后,我了解到我已经与( postgis_30_sample )数据库(我要从中复制的模板)建立了连接。当我在Geo Server应用程序中创建一些商店时,此连接是由 GeoServer 创建的。

因此我停止了该服务,此问题已解决! enter image description here

答案 11 :(得分:0)

我在以下方面有同样的问题: 错误:其他用户正在访问源数据库“ template1” 详细信息:使用该数据库还有另外1个会话。

我通过在PostgreSQL 13的左栏中单击显示了一些图形的表格来解决了postgreSQL 13中的问题。我对服务器活动表感兴趣,在这里我找到了一行,其中包含单词template1,并用叉将其关闭,然后在此处重新启动应用程序,一切正常。

error: template1-solved

答案 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->断开连接->连接)解决了这样的问题