Redshift: добавить столбец, если он не существует

Следующий работает в Postgres 9.6, но не в Redshift:

ALTER TABLE stats
    ADD COLUMN IF NOT EXISTS panel_exit timestamp;

Можно ли добиться такой же функциональности в Redshift?


person RoyalTS    schedule 04.02.2017    source источник


Ответы (2)


Команды Amazon Redshift, эквивалентной ADD COLUMN IF NOT EXISTS, не существует.

См.: документацию по ALTER TABLE.

Чтобы воспроизвести эту функциональность, ваше приложение сначала должно запросить метаданные таблицы, а затем принять решение о том, следует ли выдавать команду ADD COLUMN.

person John Rotenstein    schedule 04.02.2017

Ответ Джона направил меня в правильном направлении, вот команда, которую я нашел лучше всего работающей в Redshift для проверки существования столбца.

SELECT EXISTS(
    SELECT * FROM pg_table_def
    WHERE schemaname = '<my_schema_name>'
    and tablename = '<my_table_name>'
    and "column" = '<my_column_name>'
);

Обратите внимание, что двойные кавычки вокруг «столбца» необходимы, поскольку column также является ключевым словом.

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

set SEARCH_PATH to <schema_name>;

Подробнее см. в PG_TABLE_DEF AWS Docs.

person FoxMulder900    schedule 01.11.2017