56

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

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

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

4

17 回答 17

43

数据库template1的存在只是为了提供准系统结构来创建另一个空数据库。千万不要登录template1,否则会有问题。

对您来说最简单的解决方案可能是重新启动 PostgreSQL 服务器进程,然后再次登录。应该始终存在并且可以安全登录的数据库是postgres.

如果重新启动不是一个选项,您可以使用另一个紧急模板数据库:template0.

默认情况下,此语句:

CREATE DATABASE dbname;

相当于:

CREATE DATABASE dbname TEMPLATE template1;

如果template1不可用或损坏,您可以使用template0作为最后的手段:

CREATE DATABASE dbname TEMPLATE template0;

您可以在此处阅读有关模板数据库的更多信息。

于 2013-01-17T08:25:34.533 回答
34

这帮助我解决了我的问题:

SELECT *, pg_terminate_backend(procpid) 
FROM pg_stat_activity 
WHERE usename='username';

--Use pid if PostgreSQL version 9.2 or above.

我终止了与 template1 的所有活动连接,并且可以正常创建数据库

于 2013-01-17T09:27:36.660 回答
15

您也可以尝试通过终端终止当前进程线程

搜索过程:

sudo ps aux | grep template1

杀死进程:

sudo kill -9 <你的进程ID>

于 2016-05-14T10:23:21.393 回答
12

为了解决这个问题,我必须从 pgAdmin III 断开数据库连接。

于 2015-07-28T16:25:56.697 回答
6

我有一个连接到数据库并对其执行各种操作的脚本,其中一些要求没有其他人登录。我修改了@Andrius 的答案,不是终止我的脚本的连接,而是终止其他人的:

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();

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

于 2018-03-22T00:44:33.533 回答
4
  1. 进入 pgAdmin
  2. 右键单击服务器
  3. 断开服务器
  4. 再次连接服务器
  5. 做你想做的事
于 2020-06-16T10:05:18.127 回答
2

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

在此处输入图像描述

于 2021-01-05T01:26:37.747 回答
1

当您在 template1 和 template0 数据库中登录( psql template1psql template0 )并使用以下命令退出时,会出现此问题。

Ctrl + z

在 postgres 命令下使用 db 存在更好的方法,那么问题将不会产生:

\q + 输入

有2个解决方案,如果有问题。

解决方案 - 1

重启 posgres 服务之类的。

sudo service postgresql 重启

解决方案 - 2

须藤ps辅助| grep 模板1

确保不要删除此进程

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=自动模板1

其余进程应使用以下命令终止。

须藤杀 -9

现在尝试再次创建数据库。

希望这对您有所帮助。

安基特 H 甘地。

于 2017-11-01T07:42:44.367 回答
1

如果您使用pgadmin4或类似工具,请确保它create database自己运行或已关闭。

我用 pgadmin4 生成了一个create database,然后使用它的脚本功能来导出它使用的脚本,然后我复制并更改它以将其放入我自己的自动化脚本中。

问题是活动网页 pgadmin 以某种方式结束了 database template1

停止和重新启动服务器本身并没有解决任何问题,pgadmin 足够聪明,可以在它恢复后立即重新连接到服务器。

于 2020-10-30T15:56:51.557 回答
0

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

于 2019-05-16T14:17:22.353 回答
0

如果你转到侧面板,浏览器,服务器,数据库,那么右边是数据库的摘要......这里注意,有一个按右键找到删除数据库的下拉菜单,所以如果确定,请摆脱现有数据库,并创建一个新数据库,以便您可以声明对新创建的数据库的所有权

于 2019-12-29T22:57:51.717 回答
0

在窗户里。关闭图形用户界面。从 psql 命令提示符执行此操作。

于 2020-01-20T13:00:18.923 回答
0

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

所以我停止了服务,问题得到了解决! 在此处输入图像描述

于 2020-02-25T23:54:55.793 回答
0

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

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

错误:模板1已解决

于 2020-10-26T13:09:13.707 回答
0

如果您使用 Docker,则必须在 sequelize 配置中将主机设置为 '0.0.0.0' 而不是 'localhost'。

于 2020-11-04T00:45:35.770 回答
-1

您可以尝试重新启动后台运行的 postgresql 服务。

于 2017-02-17T19:12:31.107 回答
-1

我已经通过重新连接到服务器解决了这样的问题(pgAdmin -> 断开连接 -> 连接)

于 2020-08-09T16:28:49.967 回答