PostgreSQL是否使用循环视图列表



我想做for loop,也就是insert into from select。目标表始终相同,但源视图不同。我想循环浏览视图列表(结构相同(并进行插入。

我会在Python中做这样的事情(只是我想要实现的一个例子,我想要/需要PostgreSQL解决方案,而不是Py(

list = ["view_1", "view_2","view_3"]
for l in list:
insert into table_1 (col1, col2) select col1, col2 from l

我知道Postgres中没有列表对象,但数组是可以使用的,对吧?

如何做到这一点有什么建议/例子吗?

您需要为此使用动态SQL。对于一次性的事情,您可以使用DO块:

do
$$
declare
l_views text := array['view_1', 'view_2', 'view_3'];
l_view  text;
l_sql   text;
begin
foreach l_view in l_views 
loop
l_sql := format('insert into table_1 (col1, col2) select col1, col2 from %I', l_view);
execute l_sql;
end loop;
end;
$$;

如果您更频繁地需要它,您可以将其放入存储过程中。

另一种选择是创建一个合并所有视图的附加视图:

create view all_views
as
select col1, col2
from view_1
union all
select col1, col2
from view_2
union all
select col1, col2
from view_3;

那么您就不需要动态SQL或循环:

insert into table_1 (col1, col2)
select col1, col2
from all_views;

如果需要一个新视图作为源,则只需要调整组合所有其他视图的视图即可。

相关内容

  • 没有找到相关文章

最新更新