我正在尝试重命名我的Redshift群集中的数据库。
当你连接数据库时,你不能重命名数据库所以我创建了一个临时数据库,与SQL Workbench重新连接到临时数据库并发布:
ALTER DATABASE olddb RENAME to newdb;
我收到一条错误,指出 ERROR:其他用户正在访问数据库“olddb”[SQL State = 55006]
我已经检查了谁已连接,并且似乎有一些用户 rdsdb 与数据库的连接。我假设这是AWS Redshift用于执行维护任务等的服务帐户。
如何在连接此超级用户时重命名数据库?
非常感谢。
答案 0 :(得分:3)
您无法更改在初始群集创建期间创建的数据库的名称(或删除!)。我不相信文档中提到过这一点,但我已经与他们确认过了。
答案 1 :(得分:3)
我们可以更改已创建的数据库名称。
如何做的详细步骤
如果您还没有其他数据库,请连接到旧数据库并创建一个新数据库。
创建数据库databasebasename
在这个例子中,我将数据库名称称为'newdb'。
使用连接字符串连接到newdb,jdbc:redshift://.us-east-1.redshift.amazonaws.com:8192 / newdb,使用与超级用户(或其他用户)相同的密码和用户名符合条件的用户如上所述。)
现在您可以更改数据库名称。用所需的数据库名替换'database_name_new'。
将数据库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>';
jdbc:redshift://<cluser-id>.us-east-1.redshift.amazonaws.com:8192/database_name_new
删除数据库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步:重命名数据库