Postgre支持此操作如下:
ALTER TABLE name
SET SCHEMA new_schema
Run Code Online (Sandbox Code Playgroud)
该操作在Redshift中不起作用.有没有办法做到这一点?
我试图更新pg_class以设置表的relnamespace(模式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 | ******** | |
Run Code Online (Sandbox Code Playgroud)
那真正的红移没有给予许可吗?
Joe*_*ris 26
现在最快的方法如下:
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;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,数据my_old_schema.my_table仅被重新映射为属于my_new_schema.my_table.比做一个快得多INSERT INTO.
请注意,您可能必须删除并重新创建依赖的任何视图my_old_schema.my_table.更新:如果您经常这样做,您应该使用创建视图WITH NO SCHEMA BINDING,他们将继续指向正确的表,而无需重新创建.
小智 6
最好的方法是使用所需的模式创建一个新表,然后使用旧表中的数据执行INSERT .... SELECT.
然后删除当前表并使用ALTER TABLE重命名新表.
小智 5
您可以创建一个新表
CREATE TABLE schema1.tableName( LIKE schema2.tableName INCLUDING DEFAULTS ) ;
然后使用 INSERT INTO 语句将表的内容从一个模式复制到另一个模式
后跟 DROP TABLE 删除表。
| 归档时间: |
|
| 查看次数: |
14914 次 |
| 最近记录: |