Обсуждение: COPY table FROM STDIN via SPI

Поиск
Список
Период
Сортировка

COPY table FROM STDIN via SPI

От
James Sewell
Дата:
Is $subject possible?

 I feel like maybe the answer is no, but then I can also see some backend code for similar things in copy.h.

Perhaps it’s possible via a function call not sending the SQL?

- James

Re: COPY table FROM STDIN via SPI

От
Tom Lane
Дата:
James Sewell <james.sewell@gmail.com> writes:
> Is $subject possible?

No.  It'd be a wire protocol break, and even if it weren't I would not
expect many clients to be able to deal with it.  They're in the middle
of a query cycle (for the SELECT or CALL that got you into SPI), and
suddenly the backend asks for COPY data?  What are they supposed to
send, or where are they supposed to put it for the COPY-out case?
There's just not provision for nesting protocol operations like that.

            regards, tom lane



Re: COPY table FROM STDIN via SPI

От
James Sewell
Дата:

No.  It'd be a wire protocol break, and even if it weren't I would not
expect many clients to be able to deal with it.  They're in the middle
of a query cycle (for the SELECT or CALL that got you into SPI), and
suddenly the backend asks for COPY data?  What are they supposed to
send, or where are they supposed to put it for the COPY-out case?
There's just not provision for nesting protocol operations like that.

What about running a COPY directly from C - is that possible? 

Re: COPY table FROM STDIN via SPI

От
Joe Conway
Дата:
On 7/11/23 22:52, James Sewell wrote:
> 
>     No.  It'd be a wire protocol break, and even if it weren't I would not
>     expect many clients to be able to deal with it.  They're in the middle
>     of a query cycle (for the SELECT or CALL that got you into SPI), and
>     suddenly the backend asks for COPY data?  What are they supposed to
>     send, or where are they supposed to put it for the COPY-out case?
>     There's just not provision for nesting protocol operations like that.
> 
> 
> What about running a COPY directly from C - is that possible?


https://www.postgresql.org/docs/current/libpq-copy.html


-- 
Joe Conway
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com




Re: COPY table FROM STDIN via SPI

От
chap@anastigmatix.net
Дата:
On 2023-07-12 14:18, Joe Conway wrote:
> On 7/11/23 22:52, James Sewell wrote:
>> What about running a COPY directly from C - is that possible?
> 
> https://www.postgresql.org/docs/current/libpq-copy.html

Or is the question about a COPY kicked off from server-side
C code (following up a question about SPI)?

If the idea is to kick off a COPY that reads from the connected
client's STDIN, the wire protocol doesn't really have a way to
work that out with the client, as Tom pointed out.

Or is the goal for some server-side code to quickly populate
a table from some file that's readable on the server and has
the same format that COPY FROM expects?

Regards,
-Chap



Re: COPY table FROM STDIN via SPI

От
Joe Conway
Дата:
On 7/12/23 14:43, chap@anastigmatix.net wrote:
> On 2023-07-12 14:18, Joe Conway wrote:
>> On 7/11/23 22:52, James Sewell wrote:
>>> What about running a COPY directly from C - is that possible?
>> 
>> https://www.postgresql.org/docs/current/libpq-copy.html
> 
> Or is the question about a COPY kicked off from server-side
> C code (following up a question about SPI)?
> 
> If the idea is to kick off a COPY that reads from the connected
> client's STDIN, the wire protocol doesn't really have a way to
> work that out with the client, as Tom pointed out.
> 
> Or is the goal for some server-side code to quickly populate
> a table from some file that's readable on the server and has
> the same format that COPY FROM expects?


You can still use this in a server-side extension in the same way that 
dblink works. Perhaps ugly, but I have used it in the past and it worked 
*really* well for us.

-- 
Joe Conway
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com