RENAME TABLE
功能描述
修改表名,包括修改表的schema、重命名表、删除表的权限。
RENAME TABLE old_table to new_table;
注意事项
- 本章节只包含dolphin新增的语法,原openGauss的语法未做删除和修改。
- 当rename table语句下有多条修改表名命令时,该语法会对要修改的表名进行排序,然后按顺序加锁,再按从左往右顺序修改表名,当rename table a to b, b to c, 中间表b不存在时,则不加锁跳过。
- 对于表不存在,和目标表与存在的表发生冲突时,则报相应的错误信息。当表有同义词时,则原始表不能有同义词依赖,目标表不能存在有与之同名的同义词。
- 对目标表修改表名和模式时,会判断当前用户是否对该表拥有权限。
RENAME TABLE 语法格式
修改表的定义。
RENAME TABLE old_schema.table_name TO new_schema.new_table_name [, old_schema.table_name TO new_schema.new_table_name ...];
参数说明
RENAME TABLE可以同时重命名一张或者多张表。但必须有对旧表ALTER和DROP的权限, 和对新表CREATE和INSERT的权限。且必须对old_schema和new_schema有权限。
- 修改表名
RENAME TABLE old_table to new_table;
- 当旧表和新表在同一schema下,其等同于
ALTER TABLE old_table RENAME TO new_table;
- RENAME TABLE支持在一条sql语法中修改多张表名, 且其执行顺序是从左到右。
RENAME TABLE A TO B, B TO C, C TO A;
- RENAME TABLE 包含有锁表操作,其对表加锁顺序,是根据旧表的schema.table来排序,然后依次进行对排序后的表加锁。openGauss中的跨schema修改表名,相当于mysql中跨库修改表名。
RENAME TABLE old_schema.old_table TO new_schema.new_table;
- old_table中不能是同义词,且不能存储同义词依赖。new_table不能是同义词。
- RENAME TABLE在修改表名,同时也会修改系统表pg_type里与old_table同名的数据类型。和系统表pg_depend中的依赖。
- 不支持临时表和全局临时表。
- 不支持视图的跨schema修改表名,只支持在同一schema下表名的修改。
- RENAME TABLE改完表名后,new_table不具备old_table的权限。必须用超级用户重新给new_table分配权限。
- REANME TABLE语法,old_table如果具备触发器,则old_table不能跨schema修改表名。
- old_table和new_table不能前后一样。
- RENAME TABLE语法如果old_table不指定schema,则从search_path中遍历,直到找到old_table为止,否则报错old_table不存在。如果new_table不指定schema,则表示new_table与old_table处于同一schema中。
相关链接
意见反馈