Изменить таблицу добавить, если не существует Кассандра - PullRequest
2 голосов
/ 05 августа 2020

У меня есть сценарий обновления, который я создал и запустил раньше.

ALTER TABLE "facilities" ADD "tariff_id" text
GO 

Я хочу снова запустить этот запрос, не удаляя его из сценария. Если существует, не работает с alter. Как мне это сделать? У меня есть это исключение:

Cassandra.InvalidQueryException: 'Недействительное имя столбца price_id, потому что оно конфликтует с существующим столбцом'

Ответы [ 2 ]

3 голосов
/ 06 августа 2020

В вашем скрипте вы можете проверить, существует ли столбец, запрашивая system_schema в cassandra. Все очень просто, в вашем случае будет так:

select * from system_schema.columns where keyspace_name = 'YOUR_KEYSPACE' and table_name = 'facilities' and column_name = 'tariff_id';

Если не вернуть ни одной строки, значит, что ваш столбец не существует.

Ссылка: https://docs.datastax.com/en/dse/5.1/cql/cql/cql_using/useQuerySystemTable.html

0 голосов
/ 26 августа 2020

Я не нашел ответа на эту проблему. Лучшим решением было игнорировать этот код исключения. Мое решение:

try
{
    DB.Instance.Execute(script);
    script = "";
}
catch (Exception e)
{
    //It helps to pass the lines that already exist. Alter table add etc.
    if ( HResult == (-2146233088))
        script = "";
    else 
        throw e;
}
...