【问题标题】:postgresql - can't create database - OperationalError: source database "template1" is being accessed by other userspostgresql - 无法创建数据库 - OperationalError:其他用户正在访问源数据库“template1”
【发布时间】:2012-12-31 17:38:30
【问题描述】:

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

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

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

【问题讨论】:

  • psql 中没有exit 命令。离开psql 的命令是\q(你不应该首先登录/使用模板数据库)
  • 我必须登录,因为我需要公开模式并重新创建它以修复一个错误。
  • 也感谢您的回复。现在登录用户数并没有增加,但它保持 5 个用户连接。如何强制退出这些连接?

标签: postgresql postgresql-8.4


【解决方案1】:

数据库template1 的存在只是为了提供准系统结构来创建另一个空数据库。你应该永远不要登录到template1,否则你会遇到问题。

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

如果无法重新启动,您可以使用另一个紧急模板数据库:template0

默认情况下,这条语句:

CREATE DATABASE dbname;

相当于:

CREATE DATABASE dbname TEMPLATE template1;

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

CREATE DATABASE dbname TEMPLATE template0;

您可以阅读有关模板数据库的更多信息here

【讨论】:

  • 我不想登录,但我们的 ERP 支持告诉我们这样做,以修复一个错误..:)
  • 来自文档链接:如果存在与 template1 的任何其他连接,CREATE DATABASE 将失败。你可以使用最后的手段template0:CREATE DATABASE dbname TEMPLATE template0
  • 在旧的 Postgres 版本中,登录模板数据库有一个原因:在其中创建 plpgsql 语言,这样每个新数据库都会自动获取它。
  • 那么没有办法从template1清除连接吗? (我没有重新启动 postgresql 服务器的权限,所以我要求我们的服务器提供商这样做,但它现在处于挂起状态)
  • 您应该可以通过断开连接来清除它们。但是,请注意,模板数据库几乎不应该有任何连接。如果你使用template0,你就不需要template1。我认为这可能是有 2 个模板数据库的原因 - 对于像你这样的情况。
【解决方案2】:

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

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

--Use pid if PostgreSQL version 9.2 or above.

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

【讨论】:

  • 9.3 告诉我column "procpid" does not exist
  • @dan-klasson 使用 pid
  • 那么@Soumya 你是如何终止活动连接的?
  • @Andrius 你能告诉我们这个查询之后发生了什么吗?
  • 惊人的解决方案。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    搜索过程:

    sudo ps aux | grep template1
    

    终止进程:

    sudo kill -9

    【讨论】:

    • PID是哪一个?
    • @MarkA,第二列
    【解决方案5】:

    你可以尝试重启后台运行的postgresql服务。

    【讨论】:

      【解决方案6】:

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

      Ctrl + z

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

      \q + 回车

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

      解决方案 - 1

      重启 posgres 服务就好了。

      sudo service postgresql 重启

      解决方案 - 2

      sudo ps aux | grep 模板1

      确保不要删除此进程

      postgres 8363 0.0 0.0 111760 7832 pts/11 T 09:49 0:00 /usr/lib/postgresql/9.5/bin/psql 模板1 ankit 18119 0.0 0.0 14224 976 pts/14 S+ 12:33 0:00 grep --color=auto template1

      应使用以下命令杀死其余进程。

      sudo kill -9

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

      希望对您有所帮助。

      安基特 H 甘地。

      【讨论】:

      • 在 Mac 上对我有用的方法:brew services restart postgresql
      【解决方案7】:

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

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

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

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

            在窗口中。关闭图形用户界面。从 psql 命令提示符执行。

            【讨论】:

              【解决方案11】:

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

              所以我停止了服务,问题得到了解决!

              【讨论】:

                【解决方案12】:
                1. 进入pgAdmin
                2. 右键点击服务器
                3. 断开服务器
                4. 再次连接服务器
                5. 做你想做的事

                【讨论】:

                【解决方案13】:

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

                【讨论】:

                  【解决方案14】:

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

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

                  error: template1-solved

                  【讨论】:

                    【解决方案15】:

                    如果您使用 pgadmin4 或类似工具,请确保它正在执行 create database 本身或已关闭。

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

                    问题是活动网页 pgadmin 不知何故最终出现在数据库 template1 上。

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

                    【讨论】:

                      【解决方案16】:

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

                      【讨论】:

                      • 应该在哪里设置?
                      【解决方案17】:

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

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2012-10-07
                        • 1970-01-01
                        • 2022-06-16
                        • 1970-01-01
                        • 2020-04-21
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多