Postgre 支持如下操作:
ALTER TABLE name
SET SCHEMA new_schema
该操作在 Redshift 中不起作用。有没有办法做到这一点?
我尝试更新 pg_class 为表设置 relnamespace(schema id),这需要 super 用户帐户,并且 usecatupd 在 pg_shadow 表中为 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 | ******** | |
所以真的 redshift 不允许这样做吗?
最佳答案
最快的方法 现在如下:
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
快得多.重要提示: “数据成功追加到目标表后,源表为空”(来自AWS docs on ALTER TABLE APPEND),所以要小心运行
ALTER
只声明一次 !请注意,您可能必须删除并重新创建任何依赖于
my_old_schema.my_table
的 View 。 .更新:如果你经常这样做,你应该使用 WITH NO SCHEMA BINDING
创建你的 View 。他们将继续指向正确的表,而无需重新创建。
关于amazon-redshift - 在 Redshift 中创建后如何更改表模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22548928/