Re: PGCopyOutputStream close() v. endCopy()

From: Rob Sargent <robjsargent(at)gmail(dot)com>
To: Sehrope Sarkuni <sehrope(at)jackdb(dot)com>
Cc: pgsql-jdbc(at)lists(dot)postgresql(dot)org
Subject: Re: PGCopyOutputStream close() v. endCopy()
Date: 2019-01-11 17:07:19
Message-ID: 2bc9ac77-062a-bcd5-7037-41dcc766f620@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Thanks you, very much.

I'll revert to using close() (even though the try-with will also as it
make me more comfortable).

On 1/11/19 6:36 AM, Sehrope Sarkuni wrote:
> You're getting that error because endCopy() is being called twice.
> Once by you explicitly in deliverSegments() and again when the
> PGCopyOutputStream gets automatically closed by the
> try-with-resources:
> https://github.com/pgjdbc/pgjdbc/blob/master/pgjdbc/src/main/java/org/postgresql/copy/PGCopyOutputStream.java#L98-L112
>
> PGCopyOutputStream is a wrapper CopyIn (write to OutputStream => COPY
> TO STDIN) that adds some buffering. You shouldn't be calling endCopy()
> on it.
>
> You can either:
>
> 1. Remove the PGCopyOutputStream.endCopy() entirely as close() will
> handle it. If do not need the final row count then you're done.
> 2. Use CopyIn directly, manage the buffer yourself, and call endCopy()
> on it.
> 3. Manually manage the resources for PGCopyOutputStream so you can
> reference it for getHandledRowCount() after the close().
> 4. Call close() instead of endCopy() on PGCopyOutputStream as it
> handles being invoked more than once (it's a no-op for subsequent
> close() calls).
>
> I'm going to take a look why PGCopyOutputStream.endCopy() is declared
> public as currently there's no way to call both it and close() without
> getting an error, and you're definitely supposed to call close().
> Either it should not be public or it should be performing the same
> work as close(), i.e. clearing the internal "op" (copy operation)
> member to indicate that the close is complete so subsequent close()
> calls are not errant.
>
> Regards,
> -- Sehrope Sarkuni
> Founder & CEO | JackDB, Inc. | https://www.jackdb.com/

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Kevin Wooten 2019-01-16 13:59:00 [pgjdbc/pgjdbc] ebada4: Fixes `LocalDateTime` handling of BC dates (#1388)
Previous Message Sehrope Sarkuni 2019-01-11 13:36:14 Re: PGCopyOutputStream close() v. endCopy()