我必须更改Vertica表中的许多列,并决定完全删除表并创建一个新列。我还需要“撤消”脚本,以便在需要时恢复更改(使用mybatis迁移)。
这是我的计划:
rename mytable to mytable_backup
create mytable
create projection mytable_super (as select from mytable)
--undo
drop mytable if exists
rename mytable_backup to mytable
原始mytable也是用投影创建的。上面的脚本给出了一个错误,说投影已经存在。
DBCException: SQL Error [4482] [42710]: [Vertica][VJDBC](4482) ROLLBACK: Projection with base name "mytable_super" already exists
我相信当我重命名原始表时,基础投影不会被重命名。
在vertica中使用投影重命名表的最佳方法是什么?或者,备份表并恢复原状的最佳方法是什么?
答案 0 :(得分:2)
alter projection mytable_super rename to mytable_super_backup;
答案 1 :(得分:0)
对于重命名表,上面的答案就是一个。
重命名投影的一种方法是将投影放入SQL文件中。例如:
select CONCAT(CONCAT(projection_schema,'.'),projection_name) from projections where projection_schema like '%one_table%'
然后将其修改为以下SQL并执行(并且不要忘记运行刷新): https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/AdministratorsGuide/Projections/UpdatingProjectionsUsingRefresh.htm
一旦有了SQL,就可以执行\i /path/of/sql
(在vertica外壳内)或/opt/vertica/bin/vsql -f /path/to/sql/that.sql -U vertica_user -w vertica_passwd