Re: How to insert bulk data with libpq in C?

From: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
To: Chris Mair <chris(at)1006(dot)org>, a <372660931(at)qq(dot)com>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: How to insert bulk data with libpq in C?
Date: 2018-12-18 10:46:10
Message-ID: 51c2cd6edffd7308e317635d022690c23096eeae.camel@cybertec.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Chris Mair wrote:
> > > May I ask the proper (fast) way of inserting bulk data and if possible, an example would be very appreciated.
> > >
> > > Please note that the data I would like to insert contains arrays (float8[]).
> > >
> > > By the way, my environment is Windows 10, PostgreSQL 11 and compiling with Visual Studio 2017.
> >
> > That would be COPY:
> > https://www.postgresql.org/docs/current/sql-copy.html
>
> In particular,
>
> copy table (col1, col2, ...) from stdin with binary

Hmm, binary requires that you know the binary PostgreSQL representation.
PostgreSQL might be faster converting text to its internal representation
than your application program...

The big exception here is of course bytea, where the binary representation
is definitely smaller and easy to create.

> see also
>
> https://www.postgresql.org/docs/10/static/protocol-flow.html#PROTOCOL-COPY
>
> https://www.postgresql.org/docs/10/static/sql-copy.html#id-1.9.3.52.9.4
>
> Also, I suggesttransaction bundling (one commit every 1000 records or so),
> depending on context.

Why that?
It might be useful if you expect the load to fail in the middle and want
to be able to restart from there. But normally, doing it all in one
transaction is simpler.

Yours,
Laurenz Albe

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Chris Mair 2018-12-18 10:57:09 Re: How to insert bulk data with libpq in C?
Previous Message Chris Mair 2018-12-18 09:14:51 Re: How to insert bulk data with libpq in C?