RENAME TABLE
功能描述
RENAME TABLE
用于修改表名,包括修改表的schema、重命名表、删除表的权限。
注意事项
- 该功能仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。
- 当
RENAME TABLE
语句下有多条修改表名命令时,该语法会对要修改的表名进行排序,然后按顺序加锁,再按从左往右顺序修改表名,当rename table a to b, b to c
, 中间表b不存在时,则不加锁跳过。 - 对于表不存在,和目标表或存在的表发生冲突时,则报相应的错误信息。当表有同义词时,则原始表不能有同义词依赖,目标表不能存在有与之同名的同义词。
- 对目标表修改表名和模式时,会判断当前用户是否对该表拥有权限。
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中。RENAME TABLE
可以同时重命名一张或者多张表。但必须有对旧表ALTER和DROP的权限, 和对新表CREATE和INSERT的权限。且必须对old_schema和new_schema有权限。
语法格式
修改表的定义
RENAME TABLE old_schema.old_table TO new_schema.nnew_table [, old_schema.old_table TO new_schema.new_table ...];
修改表名
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来排序,然后依次进行对排序后的表加锁。Vastbase中的跨schema修改表名,相当于MySQL中跨库修改表名。
RENAME TABLE old_schema.old_table TO new_schema.new_table;
参数说明
old_schema
原始的模式名称。
new_schema
修改后的模式名称。
old_table
原始的表名称,不能是同义词,且不能存储同义词依赖。
new_table
修改后的表名称,不能是同义词。
示例
1、创建测试表。
CREATE TABLE t1 (c int);
CREATE TABLE t2 (c1 int);
2、同时修改t1和t2表名称。
rename table t1 to t11,t2 to t22;
返回结果如下,表示修改成功:
ALTER TABLE