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

And*_*ius 40 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.
Run Code Online (Sandbox Code Playgroud)

每次我登录template1时,都会使用'exit'命令注销,但是你可以看到它没有注销,每次登录时会话数都会增加.有没有办法强制断开与现在登录的template1的每个连接?

mvp*_*mvp 34

数据库template1仅存在于提供准系统结构以创建另一个空数据库.你永远不应该登录template1,否则你会遇到问题.

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

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

默认情况下,此语句:

CREATE DATABASE dbname;
Run Code Online (Sandbox Code Playgroud)

相当于:

CREATE DATABASE dbname TEMPLATE template1;
Run Code Online (Sandbox Code Playgroud)

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

CREATE DATABASE dbname TEMPLATE template0;
Run Code Online (Sandbox Code Playgroud)

您可以在此处详细了解模板数据库.


And*_*ius 29

这有助于我解决我的问题:

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

--Use pid if PostgreSQL version 9.2 or above.
Run Code Online (Sandbox Code Playgroud)

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

  • @ dan-klasson使用`pid` (9认同)
  • 9.3告诉我`列"procpid"不存在 (3认同)

DAS*_*NYA 10

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

搜索过程:

sudo ps aux | grep template1
Run Code Online (Sandbox Code Playgroud)

终止进程:

sudo kill -9 <您的进程ID>

  • @MarkA,第二栏 (2认同)

rox*_*azo 9

要解决这个问题,我必须断开数据库连接与pgAdmin III的连接.


Clo*_*ans 6

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

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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


Are*_*efe 6

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

在此输入图像描述