Postgresql 支持此操作,如下所示:
ALTER TABLE name
SET SCHEMA new_schema
该操作在 Redshift 中不起作用。有什么办法可以做到这一点吗?
我尝试更新 pg_class 来为表设置 relnamespace(schema id),这需要超级用户帐户,并且 pg_shadow 表中的 usecatupd 为 true。但我收到了权限被拒绝的错误。唯一可以修改 pg 系统表的帐户是 rdsdb。
server=# select * from pg_user;
usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+----------------------------------
rdsdb | 1 | t | t | t | ******** | |
myuser | 100 | t | t | f | ******** | |
那么红移真的不允许这样做吗?
最快的方法来做到这一点now如下:
CREATE TABLE my_new_schema.my_table (LIKE my_old_schema.my_table);
ALTER TABLE my_new_schema.my_table APPEND FROM my_old_schema.my_table;
DROP TABLE my_old_schema.my_table;
数据为my_old_schema.my_table
只是重新映射为属于my_new_schema.my_table
在这种情况下。比做一个要快得多INSERT INTO
.
重要的提示:“数据成功追加到目标表后,源表为空”(来自关于 ALTER TABLE APPEND 的 AWS 文档 https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE_APPEND.html),所以要小心run the ALTER
只声明一次!
请注意,您may必须删除并重新创建任何依赖于的视图my_old_schema.my_table
. 更新:如果您经常这样做,您应该使用以下命令创建视图WITH NO SCHEMA BINDING
并且它们将继续指向正确的表,而无需重新创建。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)