我想做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 中沒有串列物件,但是可以使用陣列,對嗎?
任何建議/示例如何做到這一點?
uj5u.com熱心網友回復:
為此,您將需要使用動態 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;
如果需要一個新視圖作為源,您只需要調整結合了所有其他視圖的視圖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/456447.html
標籤:数组 PostgreSQL 列表 for循环 看法
上一篇:Numpy陣列不改變陣列本身
下一篇:查找陣列中連續值的運行和長度
