VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

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