Thread: COPY support survey

COPY support survey

From
Kris Jurka
Date:
On and off there's been discussions of getting COPY support into the JDBC
driver and I produced a patch to provide a stream based interface over a
year and a half ago [1].  At the time we did not commit that because we
had grand plans to provide a friendly interface to users so they did not
have to know the internals of how COPY actually represents data.  This
mostly happened off-list between Oliver and I, but the key suggestion is
available here [2].  This allows you to use SQLOutput [3] calls like
writeTimestamp or writeArray to directly send Java objects to the database
without having to know the Postgresql specific text representation of
them.  This turned out to be harder and more involved than it looked and I
just let the patch languish, always intending to return to it, but as time
has passed I've actually had less time to dedicate to the driver instead
of more.

I know a number of people are already/still using the original patch I
provided, but at the same time they have also (indirectly) indicated that
some additional support is needed [4].

So the question is what should we do?

1) Just get the raw stream interface into the official release and let the
end user deal with reading and writing the stream.  That's all I'll use
and I don't care about anything else.

2) Don't give up, get the friendly SQLInput/SQLOutput interface in because
this is what I really want.

3) Put in the raw stream interface, but keep working to also add the
friendly one.  I'll understand if the interface changes and I have to
modify my code a bit.

Kris Jurka

[1] http://archives.postgresql.org/pgsql-jdbc/2003-12/msg00186.php
[2] http://www.ejurka.com/pgsql/copy/doc/sqlinputoutput.txt
[3] http://java.sun.com/j2se/1.4.2/docs/api/java/sql/SQLOutput.html
[4] http://archives.postgresql.org/pgsql-jdbc/2004-06/msg00165.php

Re: COPY support survey

From
Dave Cramer
Date:
I would vote for 3.I already have ported your patch over to the
(near) current code and it is being used by a few people and from
what I understand quite stable. If you want I can fix this up and
commit it.

Dave
On 19-Aug-05, at 3:03 AM, Kris Jurka wrote:

>
> On and off there's been discussions of getting COPY support into
> the JDBC driver and I produced a patch to provide a stream based
> interface over a year and a half ago [1].  At the time we did not
> commit that because we had grand plans to provide a friendly
> interface to users so they did not have to know the internals of
> how COPY actually represents data.  This mostly happened off-list
> between Oliver and I, but the key suggestion is available here
> [2].  This allows you to use SQLOutput [3] calls like
> writeTimestamp or writeArray to directly send Java objects to the
> database without having to know the Postgresql specific text
> representation of them.  This turned out to be harder and more
> involved than it looked and I just let the patch languish, always
> intending to return to it, but as time has passed I've actually had
> less time to dedicate to the driver instead of more.
>
> I know a number of people are already/still using the original
> patch I provided, but at the same time they have also (indirectly)
> indicated that some additional support is needed [4].
>
> So the question is what should we do?
>
> 1) Just get the raw stream interface into the official release and
> let the end user deal with reading and writing the stream.  That's
> all I'll use and I don't care about anything else.
>
> 2) Don't give up, get the friendly SQLInput/SQLOutput interface in
> because this is what I really want.
>
> 3) Put in the raw stream interface, but keep working to also add
> the friendly one.  I'll understand if the interface changes and I
> have to modify my code a bit.
>
> Kris Jurka
>
> [1] http://archives.postgresql.org/pgsql-jdbc/2003-12/msg00186.php
> [2] http://www.ejurka.com/pgsql/copy/doc/sqlinputoutput.txt
> [3] http://java.sun.com/j2se/1.4.2/docs/api/java/sql/SQLOutput.html
> [4] http://archives.postgresql.org/pgsql-jdbc/2004-06/msg00165.php
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
>       choose an index scan if your joining column's datatypes do not
>       match
>
>


Re: COPY support survey

From
Tom Lane
Date:
Kris Jurka <books@ejurka.com> writes:
> So the question is what should we do?

> 1) Just get the raw stream interface into the official release and let the
> end user deal with reading and writing the stream.  That's all I'll use
> and I don't care about anything else.

> 2) Don't give up, get the friendly SQLInput/SQLOutput interface in because
> this is what I really want.

> 3) Put in the raw stream interface, but keep working to also add the
> friendly one.  I'll understand if the interface changes and I have to
> modify my code a bit.

Would it not be possible to do (1) now and leave the door open to add
(2) later without breaking existing uses of (1)?  That is, I don't see
why (3) has to carry a risk of non-backwards-compatibility.  Surely you
can design non-overlapping APIs for (1) and (2).

(Obviously, my vote is for (3).)

            regards, tom lane

Re: COPY support survey

From
John R Pierce
Date:
  > Would it not be possible to do (1) now and leave the door open to add
> (2) later without breaking existing uses of (1)?  That is, I don't see
> why (3) has to carry a risk of non-backwards-compatibility.  Surely you
> can design non-overlapping APIs for (1) and (2).
>
> (Obviously, my vote is for (3).)

indeed, from a systems engineering viewpoint, thats the correct solution.  (1)
is a sort of COPY RAW function, while (2) is more java-like.    OTOH, if
there's no Java standard for a JDBC mechanism like (2), it becomes tougher to
justify.

Re: COPY support survey

From
Josh Berkus
Date:
Kris,

> I know a number of people are already/still using the original patch I
> provided, but at the same time they have also (indirectly) indicated that
> some additional support is needed [4].

Unless I'm mistaken, Dave Cramer re-worked your patch and there's a stable
version of it already in CVS.  Dave?


--
Josh Berkus
Aglio Database Solutions
San Francisco

Re: COPY support survey

From
Kris Jurka
Date:

On Fri, 19 Aug 2005, Josh Berkus wrote:

> Unless I'm mistaken, Dave Cramer re-worked your patch and there's a stable
> version of it already in CVS.  Dave?
>

I haven't seen a re-worked version and it's definitely not in CVS.

Kris Jurka

Re: COPY support survey

From
Josh Berkus
Date:
Kris,

> > Unless I'm mistaken, Dave Cramer re-worked your patch and there's a
> > stable version of it already in CVS.  Dave?
>
> I haven't seen a re-worked version and it's definitely not in CVS.

Huh.  We're using it in production based on a patch provided by Dave.   Dave?

--
Josh Berkus
Aglio Database Solutions
San Francisco

Re: COPY support survey

From
Kris Jurka
Date:

On Fri, 19 Aug 2005, Dave Cramer wrote:

> I would vote for 3.I already have ported your patch over to the (near)
> current code and it is being used by a few people and from what I understand
> quite stable. If you want I can fix this up and commit it.
>

I'd like to see what you've got, could you post it somewhere?

Kris Jurka


Re: COPY support survey

From
Dave Cramer
Date:
It hasn't been committed to CVS.

The source can be found at

http://download.postgresintl.com/

Dave
On 19-Aug-05, at 1:10 PM, Kris Jurka wrote:

>
>
> On Fri, 19 Aug 2005, Josh Berkus wrote:
>
>
>> Unless I'm mistaken, Dave Cramer re-worked your patch and there's
>> a stable
>> version of it already in CVS.  Dave?
>>
>>
>
> I haven't seen a re-worked version and it's definitely not in CVS.
>
> Kris Jurka
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 4: Have you searched our list archives?
>
>               http://archives.postgresql.org
>
>


Re: COPY support survey

From
Kris Jurka
Date:

On Fri, 19 Aug 2005, Dave Cramer wrote:

> http://download.postgresintl.com/
>

OK, well this hasn't really been reworked so much as just hacking
QueryExecutor to allow access to PGStream which breaks the thread safety
of the driver.  I think the protocol refactoring kind of implies that this
code should be put into QueryExecutorImpl now, but I haven't looked to see
how complicated that would be...

Kris Jurka