Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql批量收集_Postgresql_Plpgsql_Bulkinsert - Fatal编程技术网

Postgresql批量收集

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

我正在尝试将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 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
执行“批处理”插入应该只对数十亿行是必要的。“百万”中的任何东西都可以用。好的,谢谢。如果出现性能问题,我会再次发布。