不管类型如何的投递视图(Postgres)

时间:2019-01-09 18:56:15

标签: sql postgresql view psql materialized-views

我正在尝试将实例化视图转换为视图。由于我们的架构的部署方式,我必须提出一个SQL脚本,该脚本删除表名称中的所有内容,然后重新创建视图。但是,重新运行此代码时,我收到一个错误,该视图不是实例化视图,因此我需要使用DROP VIEW。有办法解决这个问题吗? DROP VIEW也会删除实例化视图吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下功能:

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');