Creating many Postgres connections is expensive (memory, process/thread work). A pool reuses connections and limits concurrency to protect the DB; you trade some session-level features (depending on pooling mode) for stability.