Npgsql connection pooling is implemented inside your application process – it has nothing to do with PostgreSQL, which is completely unaware of it.
The mechanism is very simple. When you close a pooled connection, instead of physically closing the connection to PostgreSQL the physical connection is kept around idle in memory (in a “pool”). The next time you open a new connection, if its connection string matches a physical connection already present in the pool, that physical connection is reused instead of opening a new physical connection.
Since opening/closing physical connections is an expensive process, this considerably speeds up your application.