amazon-redshift - 在 Redshift 中创建后如何更改表模式?

标签 amazon-redshift

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/

相关文章:

sql - (连接表规范化架构)SQL 语句选择 WHERE [x] AND WHERE [Y]

postgresql - 在 Amazon Redshift 中追加和覆盖

java - [亚马逊](500310) 无效操作 : syntax error at or near "S" RedShift Error

sql - Redshift (SQL): try convert to timestamp

java - Spring boot 2 的 Redshift jdbc 连接配置不起作用

sql - redshift 改变 udf 更改所有者

csv - 使用标题将 CSV 加载到 Redshift 中?

amazon-web-services - Redshift : How can I generate a series of numbers without creating a table called "numbers" in redshift (Postgres 8. 0.2)?

mysql - AWS Redshift 是否应该用于在线查询?

sql - 如何计算嵌入字符串中的不同时间戳?