尝试在Redshift群集中重命名数据库

时间:2014-05-13 10:05:25

标签: amazon-redshift

我正在尝试重命名我的Redshift群集中的数据库。

当你连接数据库时,你不能重命名数据库所以我创建了一个临时数据库,与SQL Workbench重新连接到临时数据库并发布:

ALTER DATABASE olddb RENAME to newdb;

我收到一条错误,指出 ERROR:其他用户正在访问数据库“olddb”[SQL State = 55006]

我已经检查了谁已连接,并且似乎有一些用户 rdsdb 与数据库的连接。我假设这是AWS Redshift用于执行维护任务等的服务帐户。

如何在连接此超级用户时重命名数据库?

非常感谢。

4 个答案:

答案 0 :(得分:3)

您无法更改在初始群集创建期间创建的数据库的名称(或删除!)。我不相信文档中提到过这一点,但我已经与他们确认过了。

答案 1 :(得分:3)

我们可以更改已创建的数据库名称。

如何做的详细步骤

  1. 如果您还没有其他数据库,请连接到旧数据库并创建一个新数据库。

      

    创建数据库databasebasename

    在这个例子中,我将数据库名称称为'newdb'。

  2. 使用连接字符串连接到newdb,jdbc:redshift://.us-east-1.redshift.amazonaws.com:8192 / newdb,使用与超级用户(或其他用户)相同的密码和用户名符合条件的用户如上所述。)

  3. 现在您可以更改数据库名称。用所需的数据库名替换'database_name_new'。

  4.   

    将数据库old-db-name重命名为database_name_new;

    如果有任何活动会话,您将不得不杀死它们。要查找活动会话的pid:

      

    从STV_SESSIONS中选择*,其中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>';
    
    1. 完成后,您可以使用连接字符串中的新名称
    2. 连接回新数据库
        

      jdbc:redshift://<cluser-id>.us-east-1.redshift.amazonaws.com:8192/database_name_new

      1. 您可以删除临时'newdb'。
      2.   

        删除数据库databasebasename

答案 2 :(得分:0)

现在可能 - 我只是重命名了在初始群集创建期间创建的数据库。

答案 3 :(得分:0)

我们有类似的情况。

第1步:连接到您要尝试重命名的数据库。通过执行SELECT CURRENT_DATABASE();进行检查。

第2步:执行下面的查询-

SELECT
    ss.*, 'select pg_terminate_backend('||process||');'
FROM
    stv_sessions ss
ORDER BY
    db_name;

查询的输出在select语句的末尾将有一列。执行那些杀死会话。

第3步(可选):如果您不是数据库的所有者,请尝试修改数据库的所有权-

ALTER DATABASE <database to be renamed>
OWNER TO <user which is going to do the rename>;

第4步:重命名数据库