Re: PGCopyOutputStream close() v. endCopy()

Поиск
Список
Период
Сортировка
От Rob Sargent
Тема Re: PGCopyOutputStream close() v. endCopy()
Дата
Msg-id 2bc9ac77-062a-bcd5-7037-41dcc766f620@gmail.com
обсуждение исходный текст
Ответ на Re: PGCopyOutputStream close() v. endCopy()  (Sehrope Sarkuni <sehrope@jackdb.com>)
Список 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/

В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Sehrope Sarkuni
Дата:
Сообщение: Re: PGCopyOutputStream close() v. endCopy()
Следующее
От: Kevin Wooten
Дата:
Сообщение: [pgjdbc/pgjdbc] ebada4: Fixes `LocalDateTime` handling of BC dates(#1388)