检查列是否存在并使用 Vertica 删除
Check if Column Exists and drop using 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 对应项也不起作用。
谁能帮我解答这个问题?
您不能使用 "IF EXISTS",因为它不受支持。请参阅 doc here
您可以遍历感兴趣的 table 列或每个 table 和 运行 仅在现有列上更改 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")
您可以使用此查询从该架构的所有表中获取所有列名称:
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;
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 对应项也不起作用。
谁能帮我解答这个问题?
您不能使用 "IF EXISTS",因为它不受支持。请参阅 doc here
您可以遍历感兴趣的 table 列或每个 table 和 运行 仅在现有列上更改 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")
您可以使用此查询从该架构的所有表中获取所有列名称:
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;