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对应物也不起作用。
有人可以帮我解决这个问题吗?
答案 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;