我试图删除一个视图,我无法确定它是MATERIALIZED VIEW还是VIEW。
DROP VIEW IF EXISTS myview;如果myview是物化视图,则抛出错误,反之亦然。我正在寻找的是drop语句(或函数),它不关心是否必须删除MATERIALIZED VIEW或VIEW。
(提示:似乎既没有drop,也没有drop-view标记,因此没有drop-table)
发布于 2018-03-21 11:01:04
在这一点上我的解决方案是一个函数
CREATE OR REPLACE FUNCTION dropview(IN view_schema TEXT, IN view2drop TEXT)
RETURNS void
LANGUAGE plpgsql
AS
$
DECLARE drop_stmnt VARCHAR;
BEGIN
SELECT
CASE
WHEN relkind = 'm' THEN 'MATERIALIZED VIEW'
WHEN relkind = 'v' THEN 'VIEW'
END
FROM pg_class
WHERE relname = view2drop
INTO drop_stmnt;
EXECUTE 'DROP ' || drop_stmnt || ' IF EXISTS ' || view_schema ||'.'|| view2drop || ';';
END;
$;所以用
SELECT dropview('myschema', 'myview');不需要关心MATERIALIZED VIEW或VIEW。
https://dba.stackexchange.com/questions/201874
复制相似问题