2014-05-13 22 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