top | item 37164115

What happens when you COPY in Postgres?

40 points| dantetheinferno | 2 years ago |blog.benthem.io

5 comments

order

terom|2 years ago

The way that the "Postgres", "libpq" terminology is used in the article ("libpq, the API backend for Postgres") leaves me more confused than I was before. I would understand "libpq" as the client-side library implementing the PostgreSQL wire protocol, and "Postgres" as the PostgreSQL server implementation, but I think in this article "Postgres" seems to refer to the psql CLI implementation?

> I’d like to dig more into how a C FILE reference is created on the server to utilize the above code. I plan to also do more more digging on the libpq side of this operation, including how the data is written to the WAL and processed

I don't think libpq has anything to do with WAL processing, and I would likely guess that the PostgreSQL server implementation actually uses mmap?

sitharus|2 years ago

The article is really unclear. COPY from a file is a fully server-side process, the server opens and loads the file directly.

However the code linked to is from psql, the CLI tool. This is for the \copy CLI command (which invokes COPY FROM STDIN on the server).

So while it’s correct that this code is talking to libpq, it really has nothing to do with how COPY is faster than a bulk INSERT. From the psql side there isn’t much difference between them, it just sends data to the server.

The actual code for copy is here https://github.com/postgres/postgres/blob/master/src/backend...

DiabloD3|2 years ago

Typo in one of the headers: libq instead of libpq