Обсуждение: PQputline in BINARY mode?
OK, I've tested both a COPY BINARY <table> FROM <file> which was very fast, and now I've also done: PQputline(conn, <test ascii string>) the question is, can I combine both techniques, and use a programmatic interface to copy binary information? We have an data collection application which needs to insert a huge amount of (binary) information very quickly, so I'm interested in squeezing out every last CPU cycle. (any other tips you have will also be appreciated). Thanks
pacquet@newsguy.com writes: > the question is, can I combine both techniques, and use a programmatic > interface to copy binary information? Nope. There's no support for binary COPY in the frontend/backend protocol. This is one of the things I'd like to see fixed next time we change the protocol. (That's a sufficiently painful thing that we don't do it often --- the last time was release 6.4 --- but we're considering a protocol rev for the next development cycle, 7.4.) regards, tom lane
Thanks. Now I realize what should have been obvious: the command "COPY BINARY" is being executed by the backend, while PQputline() is a frontend routine. Duh. However, this is an embedded system, so some modest amount of backend-hacking is quite acceptable if the payoff is large enough. Do you have any pointers on implementing a variant of COPY BINARY <> FROM file that works out of memory instead of a file? At Tue, 13 Aug 2002 17:53:44 -0400, you wrote >pacquet@newsguy.com writes: >> the question is, can I combine both techniques, and use a programmatic >> interface to copy binary information? > >Nope. There's no support for binary COPY in the frontend/backend >protocol. This is one of the things I'd like to see fixed next time >we change the protocol. (That's a sufficiently painful thing that we >don't do it often --- the last time was release 6.4 --- but we're >considering a protocol rev for the next development cycle, 7.4.) > > regards, tom lane >
pacquet@newsguy.com writes: > However, this is an embedded system, so some modest amount of > backend-hacking is quite acceptable if the payoff is large enough. Do > you have any pointers on implementing a variant of COPY BINARY <> FROM > file that works out of memory instead of a file? I think what you want is to hack the fe/be protocol so you can pass binary data in the COPY from stdin/to stdout datastream. The problem is that the message protocol for COPY is ASCII strings (ugh). Change it to be counted strings and away you go. (There are more changes that I want to see in this area than that, but that should get you the functionality you want...) backend/commands/copy.c and PQgetline/PQputline on the frontend side are the things to look at. Also read the SGML docs' chapter about the fe/be protocol. regards, tom lane