PostgreSQL - 重命名数据库

时间:2008-09-27 15:00:41

标签: sql postgresql

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

我该怎么做?

WindowsXP上的版本8.3

更新

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

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

7 个答案:

答案 0 :(得分:163)

尽量不引用数据库名称:

ALTER DATABASE people RENAME TO customers;

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

答案 1 :(得分:72)

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

-- 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

答案 2 :(得分:7)

我刚碰到这个,下面是有用的:

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

答案 3 :(得分:2)

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

所有。

答案 4 :(得分:2)

您应该尝试通过查找来自哪里以及关闭客户端进程或使用pg_cancel_backend()函数来关闭那些困扰您的连接,而不是部署nuke(重新启动服务器)。

答案 5 :(得分:0)

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

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

断开当前连接,然后使用不以您重命名的数据库为目标的连接重新连接到同一服务器。

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

答案 6 :(得分:0)

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

ALTER DATABASE postgres RENAME TO pgnew;

这行不通。

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