2008-09-27 68 views
84

我需要重命名数据库,但当我在 PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld"它告诉我它不能。PostgreSQL - 重命名数据库

我该怎么办?

8.3版本的WindowsXP上

更新

  • 第一个错误信息:不能因为我是连接到它。所以我选择了其他数据库并进行了查询。

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

+1

您可以详细说明它为什么不能。我只是做了它(在不同的平台上),它的工作 – 2008-09-27 15:03:04

+1

什么是确切的错误信息,你在postgres文档中查找这个错误?也许这是一个完美的理由。通常重命名应该工作。 – unexist 2008-09-27 15:05:19

+0

更新后看到问题 – 2008-09-27 15:06:03

回答

133

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

ALTER DATABASE people RENAME TO customers; 

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

1

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

Thx all。

1

而不是部署nuke(重新启动服务器),您应该尝试关闭那些打扰您的连接,或者通过找到它们来自哪里并关闭客户端进程或使用函数来关闭这些连接。

52

以供将来参考,你应该能够:

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

4

我只是碰到了这个以下是什么工作:

1)pdAdmin是会议之一。改为使用psql
2)在Windows上停止pgBouncer和/或调度程序服务,因为这些还会创建会话