2014-05-13 25 views
2

我正嘗試重命名我的Redshift集羣中的數據庫。嘗試重命名Redshift集羣中的數據庫

,當你連接到它,所以我已經創建了一個臨時數據庫與SQL工作臺重新連接到臨時數據庫併發布你不能重命名數據庫:

ALTER DATABASE olddb RENAME to newdb;

我得到一個錯誤,說明錯誤:數據庫「OLDDB」正被其他用戶訪問[SQL狀態= 55006]

誰連接,並似乎有從用戶rdsdb到數據庫中的某些連接我檢查。我認爲這是AWS Redshift用於執行維護任務的服務帳戶等。

如何在連接超級用戶時重命名數據庫?

非常感謝。

+0

Redshift是否會在其web ui或api中公開重命名工具?經常Redshift設置,所以正常的PostgreSQL方式不起作用,你需要通過亞馬遜用戶界面做一些不同的事情。 –

+0

沒有別的,我可以在文檔中看到,只是ALTER DATABASE:http://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html – novabracket

回答

3

您不能更改在初始羣集創建期間創建的數據庫的名稱(或刪除!)。我不相信這是在文檔中提到的,但我已經與他們確認過。

0

現在可能了 - 我只是重命名了在初始集羣創建期間創建的數據庫。

+0

嗨亞歷克斯,我得到這個錯誤,當我試圖重命名我的數據庫。 '[亞馬遜](500310)操作無效:當前數據庫可能不會被重命名' – praveen

+1

是的,我想我在該羣集上創建了一個虛擬數據庫,連接到該羣集,並重命名爲初始之後一個。 –

+0

謝謝亞歷克斯。這有幫助。 – praveen

1

我們可以更改已創建的數據庫名稱。

如何做到

  1. 連接到舊數據庫,並創建一個新的數據庫,如果你沒有另外一個已經詳細步驟。

    create database databasebasename

    在這個例子中,我將調用數據庫名爲'newdb'。

  2. 使用連接字符串as,jdbc連接到newdb:redshift://.us-east-1.redshift.amazonaws.com:8192/newdb,與超級用戶的密碼和用戶名相同(或其他符合條件用戶如上所述)。

  3. 現在您可以更改數據庫名稱。用所需的數據庫名替換'database_name_new'。

alter database old-db-name rename to database_name_new;

如果有任何活動的會話,你必須要殺死他們。要找到活動會話的PID:

select * from STV_SESSIONS where user_name='rdsdb';

然後終止會話:

SELECT 
     pg_terminate_backend(<pid>) 
    FROM 
     pg_stat_activity 
    WHERE 
     -- don't kill my own connection! 
     procpid <> pg_backend_pid() 
     -- don't kill the connections to other databases 
     AND datname = '<old-db-name>'; 
  • 完成後,就可以使用背面連接到新的數據庫在連接字符串中新名稱作爲
  • jdbc:redshift://<cluser-id>.us-east-1.redshift.amazonaws.com:8192/database_name_new

  • 可以刪除臨時 'NEWDB'。
  • drop database databasebasename