如何在将投影放入Vertica之前检查投影是否存在?

时间:2016-01-28 19:17:46

标签: sql ddl vertica

我想做点什么

DROP PROJECTION IF EXISTS myProjection;

显然我可以将 IF EXISTS 用于表格而不是投影。

我理解如果我用CASCADE放下表格,应该删除相应的投影,但我显然有一些孤立的投影,我没有跟踪。有时当我重命名表格/投影时,投影已经存在就失败了。

The Drop Projection pagethis stackoverflow page for generic sql没什么帮助。

编辑:我在Mybatis Migrations中使用它。因此,如果任何脚本中存在错误,我的整个迁移都将失败。所以,不,我不能忽视错误。

如果投影没有IF EXISTS - 是否有编程方式(LIKE TSQL / PLSQL),我可以指定条件来检查投影是否存在并采取措施是否放弃?

3 个答案:

答案 0 :(得分:1)

没有drop projection IF EXISTS ...。您可以使用drop projection ... - 当然 - 如果您尝试删除的投标不存在,您将收到错误消息。

您可以使用如下SQL的SQL列出给定模式/表的所有投影:

\set schema '''my_schema'''
\set table '''my_table'''
select
    projection_name,
    sum(row_count) as row_count, 
    sum(used_bytes) as used_bytes,
    sum(wos_row_count) as wos_row_count, 
    sum(wos_used_bytes) as wos_used_bytes, 
    sum(ros_row_count) as ros_row_count, 
    sum(ros_used_bytes) as ros_used_bytes
from
    projection_storage 
where 
    anchor_table_schema = :schema and
    anchor_table_name = :table
group by 1
order by 1
;

以下将列出与给定模式中的表关联的所有投影:

\set schema '''my_schema'''
select
    projection_name,
    anchor_table_name,
    sum(row_count) as row_count, 
    sum(used_bytes) as used_bytes,
    sum(wos_row_count) as wos_row_count, 
    sum(wos_used_bytes) as wos_used_bytes, 
    sum(ros_row_count) as ros_row_count, 
    sum(ros_used_bytes) as ros_used_bytes
from
    projection_storage 
where 
    anchor_table_schema = :schema
group by 1, 2
order by 1, 2
;

答案 1 :(得分:1)

您可以在vertica中查询目录表,这将为您提供所有当前模式的模式名称,

hiddenDiv.style.display = (this.value != "option1" && this.value != "option2") ? "none":"block";

答案 2 :(得分:0)

从 Vertica 9.2.x 开始,这是可能的。

DROP PROJECTION IF EXISTS myProjection;

参考:https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/DROPPROJECTION.htm