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的所有活动连接,并且可以正常创建数据库
DAS*_*NYA 10
您也可以尝试通过终端终止当前进程线程
搜索过程:
sudo ps aux | grep template1
Run Code Online (Sandbox Code Playgroud)
终止进程:
sudo kill -9 <您的进程ID>
我有一个连接到数据库并对其执行各种操作的脚本,其中一些要求没有其他人登录。我修改了@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。
归档时间: |
|
查看次数: |
41862 次 |
最近记录: |