Отбросить представление независимо от типа (Postgres) - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь преобразовать материализованное представление в представление. Из-за того, как наши схемы развернуты, мне нужно придумать сценарий SQL, который отбрасывает все, что есть в имени таблицы, и заново создает представление. Тем не менее, я получаю сообщение об ошибке при повторном запуске этого кода, что представление не является материализованным представлением, и вместо этого мне нужно использовать DROP VIEW. Есть ли способ обойти это? DROP VIEW также пропустит материализованное представление?

1 Ответ

0 голосов
/ 10 января 2019

Вы можете использовать функцию:

create or replace function drop_any_view(regclass)
returns void language plpgsql as $$
begin
    execute format(
        'drop %s view %s', 
            case (select relkind from pg_class where oid = $1)
            when 'm' then 'materialized'
            else '' end,
            $1
        );
end $$;

Функция отбрасывает вид независимо от того, материализован он или нет.

select drop_any_view('my_view');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...