【问题标题】:Trying to rename a database in Redshift cluster尝试重命名 Redshift 集群中的数据库
【发布时间】:2014-06-30 22:51:57
【问题描述】:

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

连接后无法重命名数据库,因此我创建了一个临时数据库,使用 SQL Workbench 重新连接到临时数据库并发出:

ALTER DATABASE olddb RENAME to newdb;

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

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

当这个超级用户连接时,我如何重命名数据库?

非常感谢。

【问题讨论】:

  • Redshift 是否在其 web ui 或 api 中公开了重命名工具?通常 Redshift 已设置,因此正常的 PostgreSQL 方式不起作用,您需要通过 Amazon UI 做一些不同的事情。
  • 我在文档中看不到其他任何内容,只是 ALTER DATABASE:docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html

标签: amazon-redshift


【解决方案1】:

我们也遇到过类似的情况。

第 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 步:重命名数据库

【讨论】:

    【解决方案2】:

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

    详细操作步骤

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

      创建数据库数据库名称

      在本例中,我将数据库名称称为“newdb”。

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

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

    alter database old-db-name 重命名为 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>';
    
    1. 完成后,您可以使用连接字符串中的新名称连接回该新数据库,例如

    jdbc:redshift://&lt;cluser-id&gt;.us-east-1.redshift.amazonaws.com:8192/database_name_new

    1. 您可以删除临时的“newdb”。

    删除数据库数据库名称

    【讨论】:

      【解决方案3】:

      现在可以了——我刚刚重命名了在初始集群创建期间创建的数据库。

      【讨论】:

      • 嗨,Alex,当我尝试重命名数据库时出现此错误。你是如何连接到数据库来重命名它的。'[Amazon](500310) 无效操作:当前数据库可能不会被重命名'
      • 是的,我想我在那个集群上创建了一个虚拟数据库,连接到它,然后重命名了最初的数据库。
      • 谢谢亚历克斯。这有帮助。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-28
        • 2017-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-19
        相关资源
        最近更新 更多