Условно удалить временную таблицу в Redshift

Мы используем http://aws.amazon.com/redshift/, и я создаю / удаляю временные таблицы в отчетах. Иногда мы сталкиваемся со случаями, когда кто-то создал временную таблицу и не смог ее удалить.

В других базах данных, например PostgreSQL, на котором основан Redshift, я мог бы просто:

DROP TEMP TABLE IF EXISTS tblfoo;

Но это синтаксическая ошибка Redshift. Я могу сам проверить наличие временных таблиц, используя http://docs.aws.amazon.com/redshift/latest/dg/r_STV_TBL_PERM.html, но это работает только в том случае, если я являюсь суперпользователем и не работаю как суперпользователь. Я также мог пойти и проглотить исключения, но с моей системой отчетности я бы предпочел не идти туда.

Итак, как я могу, как обычный пользователь и не генерируя ошибок базы данных, условно удалить временную таблицу, если она существует?


person btilly    schedule 03.07.2014    source источник


Ответы (1)


Проведенный мною тест показал, что я могу видеть временные таблицы других пользователей в stv_tbl_perm, используя идентификатор не суперпользователя. Версия кластера, в которой я тестировал, - 1.0.797. Обратите внимание, что ни один пользователь не может видеть временные таблицы других пользователей в pg_class.

person mike_pdb    schedule 07.07.2014
comment
Клянусь, на прошлой неделе я получил сообщение об ошибке от select * from stv_tbl_perm where temp = 1;, но теперь вроде работает. Это только что изменилось в Redshift ?? - person btilly; 08.07.2014
comment
Не уверен. Рад, что теперь это работает для вас. Def хотел бы, чтобы функциональность if exists была встроена. - person mike_pdb; 08.07.2014