2008-09-27 146 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和/或調度程序服務,因爲這些還會創建會話