Postgresql批量收集
我正在尝试将oracle应用程序迁移到postgresql。 在oracle的一个函数中,我有下一个代码:Postgresql批量收集,postgresql,plpgsql,bulkinsert,Postgresql,Plpgsql,Bulkinsert,我正在尝试将oracle应用程序迁移到postgresql。 在oracle的一个函数中,我有下一个代码: V_Step := 3; command := 'declare type tab_data is table of ' || tab_name || '%ROWTYPE; CURSOR raw_data is SELECT * FROM ' || tab_name || '_vw; mydata ta
V_Step := 3;
command := 'declare
type tab_data is table of ' || tab_name ||
'%ROWTYPE;
CURSOR raw_data is SELECT * FROM ' || tab_name ||
'_vw;
mydata tab_data;
V_COUNTER integer := 0;
BEGIN
open raw_data;
LOOP
V_COUNTER := V_COUNTER + 1;
FETCH raw_data BULK COLLECT INTO mydata LIMIT ' ||
to_char(current_setting('Gaps.BATCH_SIZE')::bigint) || ';
FORALL i IN 1..mydata.COUNT
INSERT INTO ' || tab_name ||
' VALUES mydata(i);
EXIT WHEN raw_data%NOTFOUND;
END LOOP;
RAISE NOTICE ''V_COUNTER = '%', V_COUNTER;
--commit;
close raw_data;
END;';
V_Step := 4;
RAISE NOTICE '%', command;
V_Step := 5;
EXECUTE command;
我们正试图将来自远程oracle表(我有链接)的大量数据加载到本地postgresql表中。在oracle中,使用批量使其比常规的
插入到x中更快选择*from
。postgresql中是否有类似于oracle bulk的函数?您可以使用表类型的数组:tab\u data tab\u name[]
并在select语句中使用array\u agg()
。但我会先尝试一个简单的插入。。。选择。。。从link_table
执行“批处理”插入应该只对数十亿行是必要的。“百万”中的任何东西都可以用。好的,谢谢。如果出现性能问题,我会再次发布。