On Sun, 2021-09-19 at 10:28 +0000, Niels Jespersen wrote:
> We are often using the oracle_fdw to transfer data between Postgres (version 
> 11+) and Oracle (version 18+). It works great.
>  
> However I have a task at hand that requires inserting a few billion rows in 
> an Oracle table from a Postgres query.
>  
> insert into t_ora (a,b,c)   
> select a,b,c from t_pg;
>  
> This is driven from a plpgsql stored procedure, if that matters.
>  
> I want to optimize the running time of this. But I am unsure of which, if 
> any, possibilities there actually is.
>  
> Reducing the number of network roundtrips is usually a good way to increase 
> throughput. But, how do I do that?
>  
> If I could make the Oracle insert direct load, that would usually also 
> increase throughput.
> But, is that possible here. There are no constraints defined on the 
> destinaton tables.

The cause of the bad performance for bulk data modifications is that the FDW 
API is built
that way: each row INSERTed means a round trip between PostgreSQL and Oracle.

That could be improved by collecting rows and inserting them in bulk on the 
Oracle
side, but I don't feel like implementing that and complicating the code.

>From my point of view, oracle_fdw is good for reading, but not for bulk writes.

Yours,
Laurenz Albe
-- 
Cybertec | https://www.cybertec-postgresql.com



Reply via email to