使用Vertica

时间:2015-07-09 15:03:08

标签: exists alter vertica

f我们有一个HP Vertica数据库,我正在编写一些脚本,最终将部署在GIT中以更改我的维度模型。作为前几行中普通家务的一部分,我将有一些代码将删除脚本中被修改的元素,这些元素似乎都非常直接。

以下是我正在使用的一种示例,它有效。

DROP CONSTRAINT if exists fk_fctClick_Money_SourceKey


DROP TABLE if exists SCHEMA.dimSourceType

在查看列是否存在时,我对如何实现此代码感到困惑。在大多数其他数据库中看起来很简单,但我无法在Vertica中找到任何关于如何执行此操作的内容。

我知道在PostgreSQL中看起来有点像这样:

ALTER TABLE SCHEMA.dimSourceTypeS DROP COLUMN IF EXISTS SourceKey;

这不起作用,因为错误表示单词附近有错误" EXISTS"。 MSSQL对应物也不起作用。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

你不能使用"如果EXISTS"因为它不受支持。 Pl见doc here

您可以遍历感兴趣的表或每个表的列,并仅在现有列上运行alter table。

使用您喜欢的语言使用以下内容:

for a given table
   set_of_existing_cols = get("SELECT COLUMN_NAME FROM columns WHERE table_name = <YOUR_TABLE>")
   set_of_delete_columns = set_of_existing_columns intersect set_of_columns_you_want_to_delete
   for each column from set_of_delete_colmn
      run("ALTER TABLE <YOUR_TABLE> DROP COLUMN column")

答案 1 :(得分:0)

您可以使用此查询从该架构的所有表中获取所有列名:

select table_schema,table_name,column_name,data_type from v_catalog.columns where select table_schema,table_name,column_name,data_type from v_catalog.columns limit 1 like '%table_name% ;

此查询的结果,通常是列表[[a,b,c,int]]的列表 然后您可以查找并查看该col是否存在。

删除:

alter table table_name drop column col_name;