2015-07-09 3 views
0

У нас есть база данных HP Vertica, и я пишу несколько сценариев, которые в конечном итоге будут развернуты в GIT, чтобы внести изменения в мою размерную модель. Как часть общего содержания дома в первых нескольких строках, у меня будет некоторый код, который удалит элементы, которые будут изменены в скрипте, которые все кажутся очень напряженными вперед.Проверьте, существует ли столбец с помощью Vertica

Вот пример того, что я использую, и он работает.

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; 

Это не работает, как ошибка говорит, что ошибка возле слова «СУЩЕСТВУЕТ». Аналоги MSSQL не работают.

Может ли кто-нибудь помочь мне в этом вопросе, пожалуйста?

+0

Вы можете запросить 'columns' таблицу, чтобы увидеть, если столбец существует. У Vertica нет 'IF EXISTS' – Kermit

+0

Привет, @ Kermit, спасибо за ваш ответ. IF EXISTS работает над образцом, который я предоставил в Vertica (отбросить таблицу или ограничение), но это просто с удалением столбца, который я не могу заставить его работать. –

ответ

0

Вы не можете использовать «IF EXISTS», так как он не поддерживается. Pl см. doc here

Вы можете прокручивать столбцы таблицы интересов или каждую таблицу и запускать таблицу изменений только для существующих столбцов.

С чем-то, как показано ниже, используя ваш любимый язык:

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")