我想创建一个像这样的临时视图:
CREATE VIEW temp_view AS SELECT .....
然后通过调用一些函数来定义一个名称,我想将我的普通视图创建为:
--- my main_viewYYYYMMDD will have the contents of temp_view
DO
$$
BEGIN
EXECUTE format( 'CREATE OR REPLACE VIEW schema.%I '
' AS SELECT * FROM schema.temp_view', getViewName() ) ;
END ;
$$ LANGUAGE plpgsql ;
然后DROP VIEW temp_view ;
失败,因为存在从属视图。
CREATE TEMP VIEW temp_view ...
可以解决此问题吗?
答案 0 :(得分:3)
使用VIEW
从定义中创建pg_get_viewdef
create or replace view temp_view as select * from employees;
DO
$$
BEGIN
EXECUTE format( 'CREATE OR REPLACE VIEW public.%I '
' AS %s ' , 'yourviewname' ,pg_get_viewdef('temp_view', true)) ;
DROP VIEW temp_view;
END ;
$$ LANGUAGE plpgsql ;
您可能还创建了temp_view
作为临时视图。临时视图会在当前会话结束时自动删除。但是,它的定义将一直显示到会话结束。对于这种情况,您无需在drop view
块中包含do
,以防在会话结束之前没有对它执行任何其他操作。