152

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

我该怎么做?

WindowsXP 上 8.3 版

更新

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

  • 我收到第二条错误消息,告诉我它已经连接到用户。我在PGAdmin屏幕上看到它有很多PID,但它们是不活动的……我不知道如何杀死它们。

4

7 回答 7

210

尝试不引用数据库名称:

ALTER DATABASE people RENAME TO customers;

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

于 2008-09-27T15:03:27.477 回答
100

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

-- 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_activity列在 9.2 之前的版本中pid被命名procpid。因此,如果您的 PostgreSQL 版本低于 9.2,请procpid使用pid.

于 2011-10-06T18:43:49.377 回答
7

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

1)pgAdmin是会议之一。改为使用psql
2) 停止pgBouncerWindows 上的和/或调度程序服务,因为这些服务也会创建会话

于 2013-08-25T15:29:14.900 回答
3

Unexist told me in comment to restart the database and it works! Restarting the database kill all existing connection and then I connect to an other database and was able to rename it with my initial query.

Thx all.

于 2008-09-27T15:16:02.733 回答
3

Instead of deploying a nuke (restarting the server) you should try to close those connections that bother you either by finding where are they from and shutting down the client processes or by using the pg_cancel_backend() function.

于 2008-09-27T15:43:10.470 回答
0

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

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

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

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

于 2020-03-06T05:03:19.017 回答
0

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

ALTER DATABASE postgres RENAME TO pgnew;

这行不通。

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

于 2021-04-05T10:49:47.350 回答