【问题标题】:PostgreSQL - Rename databasePostgreSQL - 重命名数据库
【发布时间】:2010-09-13 17:06:03
【问题描述】:

我需要重命名数据库,但是当我这样做时 PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld" 它告诉我它不能。

我该怎么做?

WindowsXP 上的版本 8.3

更新

  • 第一条错误消息:无法连接,因为我已连接到它。所以我选择了另一个数据库并进行了查询。

  • 我收到第二条错误消息,告诉我它已进入用户连接。我在PGAdmin 屏幕中看到它有许多PID,但它们处于非活动状态......我不知道如何杀死它们。

【问题讨论】:

  • 您可以详细说明为什么不能。我刚刚做了(虽然在不同的平台上)并且它有效
  • 确切的错误消息是什么,您是否在 postgres 文档中查找过此错误?也许这种行为有一个完美的理由。通常重命名应该可以工作。
  • 更新见问题
  • 为什么不直接重启数据库?
  • 确切的错误消息是什么,您是否在 postgres 文档中查找过此错误?也许这种行为有一个完美的理由。通常重命名应该有效。如果您遇到挂起或死连接的问题,只需重新启动数据库即可摆脱它们。

标签: sql postgresql


【解决方案1】:

尽量不要引用数据库名称:

ALTER DATABASE people RENAME TO customers;

还要确保当时没有其他客户端连接到数据库。最后,尝试发布它返回的错误消息,以便我们获得更多信息。

【讨论】:

  • 名称中包含大写字母时需要引用。
  • 不是这样,但是当名称有.@时也需要引用。
  • 名称中包含-时也需要引用
  • 以上建议让我认为最好将表名限制为小写字母下划线(如果可能)!
  • 名称中包含空格时也要加引号
【解决方案2】:

为了将来参考,您应该能够:

-- disconnect from the database to be renamed
\c postgres

-- force disconnect all other clients from the database to be renamed
SELECT pg_terminate_backend( pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
    AND datname = 'name of database';

-- rename the database (it should now have zero clients)
ALTER DATABASE "name of database" RENAME TO "new name of database";

请注意,表 pg_stat_activitypid 在 9.2 之前的版本中被命名为 procpid。因此,如果您的 PostgreSQL 版本低于 9.2,请使用 procpid 而不是 pid

【讨论】:

  • 它对我有用,谢谢!但是 pg_stat_activity 中的列名是 pid 而不是 procpid。 (PostgreSQL 9.3.5 on x86_64-apple-darwin, compiled by i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00), 64-bit)
  • 强制断开代码非常有用,应该在接受的答案中。
【解决方案3】:

我刚遇到这个,下面是有效的:

1) pgAdmin 是其中一个会话。请改用psql
2) 停止 Windows 上的 pgBouncer 和/或调度程序服务,因为它们也会创建会话

【讨论】:

    【解决方案4】:

    Unexist 在评论中告诉我重新启动数据库并且它可以工作!重新启动数据库会终止所有现有连接,然后我连接到另一个数据库并能够使用我的初始查询重命名它。

    谢谢。

    【讨论】:

      【解决方案5】:

      您应该尝试关闭那些困扰您的连接,方法是找出它们来自哪里并关闭客户端进程,或者使用pg_cancel_backend() 函数,而不是部署核弹(重新启动服务器)。

      【讨论】:

        【解决方案6】:

        对于使用 DBeaver 遇到此问题并收到如下错误消息的任何人:

        ERROR: database "my_stubborn_db" is being accessed by other users
          Detail: There is 1 other session using the database.
        

        断开您当前的连接,然后使用不针对您要重命名的数据库的连接重新连接到同一台服务器。

        更改活动数据库是不够的。

        【讨论】:

          【解决方案7】:

          当通过 pgadmin 连接时,默认数据库是 postgres。

          ALTER DATABASE postgres RENAME TO pgnew;
          

          这行不通。

          您需要在 pgadmin 中右键单击服务器并将维护数据库设置为其他数据库并保存。然后重试,如果没有其他连接,它应该可以工作。

          【讨论】:

            猜你喜欢
            • 2023-03-26
            • 2016-07-06
            • 1970-01-01
            • 1970-01-01
            • 2012-05-07
            • 2012-08-24
            • 2012-01-02
            • 2011-12-04
            • 2018-01-27
            相关资源
            最近更新 更多