PostgreSQL-重命名数据库

我需要重命名数据库,但当我在 它告诉我,它不能。

我该怎么做?

(WindowsXP 上的8.3版本)

更新

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

  • 我得到第二个错误消息告诉我,它已经来到用户连接。我看到在 PGAdmin屏幕上有许多 PID,但他们是不活跃的... 我不知道如何杀死他们。

97333 次浏览

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

ALTER DATABASE people RENAME TO customers;

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

不存在告诉我在评论中重新启动数据库,它的工作!重新启动数据库会杀死所有现有的连接,然后我连接到另一个数据库,并能够用我的初始查询重命名它。

谢谢大家。

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

以供日后参考,你应该能够:

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

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

我只是碰巧遇到了这个,下面是工作原理:

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

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

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

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

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

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

ALTER DATABASE postgres RENAME TO pgnew;

这行不通的。

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